作为服务运行时,Python脚本未启动Bash脚本

时间:2018-09-12 15:44:26

标签: bash systemd python

我有一个python脚本,可以作为服务自动启动(通过systemd激活)。在此python脚本中,我使用subprocess.call(script_file,shell=True)调用了bash脚本。

当我手动调用python脚本($ python my_python_script.py)时,一切正常。但是,自动启动的程序不会执行bash脚本(无论如何运行,我都检查了一下,使其编辑了文本文件,实际上确实如此)。

我(认为)我授予了所有人对bash脚本的读写权限。有人对我在做什么错有想法吗?

附录:我想编写一个小脚本,通过电报向我发送我的公共IP地址。服务文件如下所示:

[Unit]
Description=IPsender
After=networking.service

[Service]
Type=simple
User=root
WorkingDirectory=/home/pi/projects/tg_bot
ExecStart=/home/pi/miniconda3/bin/python /home/pi/projects/tg_bot/ip_sender_tg.py
Restart=always


[Install]
WantedBy=multi-user.target

1 个答案:

答案 0 :(得分:1)

Protawn,欢迎使用Unix和Linux StackExchange。

为什么脚本在系统下的工作方式不同是一个常见的问题。在该网站的其他地方查看this answer的常见问题。

没有Python和Bash脚本的源代码,很难猜测您遇到了什么区别。

我个人的猜测是,您的bash脚本正在调用其他没有完整路径的二进制文件,而这些路径是在您的shell $PATH中找到的,而不是默认的systemd path

set -x添加到bash脚本的顶部,以便所有操作均被记录为标准输出,并将记录在systemd日志中。然后,在失败后,使用journalctl -u your-service-name查看服务日志,以查看是否可以找到bash成功执行的最后一条命令。还可以考虑在bash脚本中使用set -e,以使其在第一个错误时停止。

尽管在此主题上有两次“脱位”“关闭”表决,但在此Stack Exchange站点的主题中,为何在systemd下工作却不同。