首页 文章

systemd脚本工作但不使用curl

提问于
浏览
0

在Debian Jessie上,我正在努力将init脚本迁移到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

注册脚本(由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会在这些条件下超时,我需要更改什么才能使服务按预期运行?

谢谢你的帮助

1 回答

  • 1

    问题解决了:

    这一切都发生在虚拟服务器上,http访问现在通过代理,这在我使用init脚本之前就没有了 .

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

相关问题