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

Python脚本在作为服务运行时未启动Bash脚本,bash,systemd,python,Bash,Systemd,Python,我有一个python脚本,可以作为服务自动启动(使用systemd激活)。在这个python脚本中,我使用subprocess.call(script\u file,shell=True)调用bash脚本 当我手动调用python脚本($python my\u python\u script.py)时,一切都运行得很好。但是,自动启动的程序不会执行bash脚本(不管它是如何运行的,我检查了这个选项,让它编辑一个文本文件,它确实执行了) 我(想)我给了每个人对bash脚本的读写权限。有人知道我做错

我有一个python脚本,可以作为服务自动启动(使用systemd激活)。在这个python脚本中,我使用
subprocess.call(script\u file,shell=True)
调用bash脚本

当我手动调用python脚本(
$python my\u python\u 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

Protawn,欢迎使用Unix和Linux StackExchange

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

如果没有Python和Bash脚本的源代码,很难猜出您遇到了什么不同

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

set-x
添加到bash脚本的顶部,以便将所有操作记录到标准输出,这些操作将在
systemd
日志中捕获。然后在它失败后,使用
journalctl-u您的服务名称
查看服务的日志,看看是否可以找到bash成功执行的最后一个命令。还考虑在BASH脚本中使用<代码> SET-E/COM>使它在第一个错误停止。


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

python脚本是否需要完全路径bash脚本?python脚本究竟如何调用bash脚本?我使用os.getcwd()获取bash脚本的正确路径。听起来像是环境问题:您的环境中有一些东西不在守护进程的环境中。是否使用绝对路径调用shell脚本?你依赖任何环境变量吗?@glennjackman你是什么意思?我连接了整个路径和脚本名,并将其作为参数,也就是说,它看起来像subprocess.call('/home/pi/../myscript.sh',shell=True)。如果您猜测并且不确定OP是如何调用脚本的,我还不确定答案是否正确。
set-x
journalctl
的输出将澄清注释。