我正在努力将一个init脚本迁移到systemd,在Debian Jessie上。
目标是在启动之后和关机之前访问URL。服务文件如下所示:
[Unit]
Description=some_name
After=syslog.target network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/bin/bash /home/xyz/scripts/register.bash
ExecStop=/bin/bash /home/xyz/scripts/deregister.bash
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
注册脚本(由xyz替换的URL,用于调试的echos):
#!/bin/bash
IP=$(hostname -I)
IP=${IP/ /}
echo "-- register $(date) IP=$IP" >>/home/xyz/register.txt
echo " $(who -r) ID=$(id) HOST=$(host x.y.z)" >>/home/xyz/register.txt
/usr/bin/curl --max-time 30 "http://x.y.z/some_script" -s -o /dev/null
echo " exit code $?" >>/home/xyz/register.txt
echo "-- reg done $(date)" >>/home/xyz/register.txt
exit 0
从命令行触发脚本按预期工作,也以root身份运行。特别是,curl会按原样访问URL。
此外,脚本在引导和关闭时启动,并引导register.txt中的相应跟踪。到目前为止一切都很好。
然而,不起作用的是,当通过systemd启动时,curl退出代码28(超时)。当我用" systemd start"触发它时也会发生这种情况。来自完全启动的系统,网络启动并运行。因此,网络不可用似乎不是超时的原因。
为什么curl会在这些条件下超时,我需要更改什么才能使服务按预期运行?
感谢您的帮助
答案 0 :(得分:1)
问题解决了:
这一切都发生在虚拟服务器上,现在通过代理进行http访问,而我之前使用的是init脚本。
在systemd调用的脚本中设置代理变量解决了问题......