linux - systemd 脚本有效但不使用 curl

标签 linux curl systemd

我正在努力将初始化脚本迁移到 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,echo用于调试):

#!/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中引出相应的traces。到目前为止一切顺利。

然而,不起作用的是,当通过 systemd 启动时,curl 以代码 28(超时)退出。当我从网络启动并运行的完全启动系统中使用“systemd start”触发它时,也会发生这种情况。所以网络不可用似乎不是超时的原因。

为什么 curl 在这些情况下超时,我需要更改什么才能让服务按预期运行?

谢谢你的帮助

最佳答案

问题解决:

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

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

关于linux - systemd 脚本有效但不使用 curl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33240283/

相关文章:

linux - Shell 脚本 find cmin 在目录而不是文件上求值

c - 如何同步文件移动到存储?

php - 使用curl下载间接图像文件

linux - linux(systemd)通过<demo>.service文件查询和设置ulimit

linux - bash 引用通过管道传入的参数/变量

linux - 字符串命令基数偏移量与 dd/xxd 文件偏移量不一致

python - 如何将参数传递给已通过管道传输到 Python 进程的 curl 脚本?

php - 在 PHP 中同时使用 SOAP 和 REST WebServices

linux - 以编程方式启动 systemd 服务或测试服务是否正在运行

docker - Docker容器在CoreOS中消失了一段时间