Python脚本在作为服务运行时不启动Bash脚本

问题描述 投票:0回答:1

我有一个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
bash systemd python
1个回答
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让它在第一个错误处停止。

尽管在这个主题上有两个“偏离主题”的“关闭”投票,但为什么在systemd下工作方式不同的是这个Stack Exchange站点的主题。

© www.soinside.com 2019 - 2024. All rights reserved.