systemd 脚本有效但不使用 curl

systemd script works but not using curl

我正在努力将初始化脚本迁移到 Debian Jessie 上的 systemd。

目标是在启动后和关机前访问 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 

注册脚本(URLs替换为xyz,回显调试):

#!/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 在这些情况下超时,我需要更改什么才能按预期获得服务 运行?

感谢您的帮助

已解决的问题:

这一切都发生在虚拟服务器上,现在可以通过代理进行 http 访问,这在我使用 init 脚本之前是不存在的。

在systemd调用的脚本中设置代理变量解决了问题...