【发布时间】:2019-05-19 10:06:38
【问题描述】:
当我使用 systemctl 启动 python 应用程序时,python 子进程在运行标准 shell 命令(如 tail、awk 等)时失败。
代码示例:
import subprocess
process = subprocess.Popen(['awk'], stdout=subprocess.PIPE)
保存以上内容并通过 python app.py 运行它 - 没问题。
使用 systemctl 运行相同的命令,您将收到以下错误:
FileNotFoundError: [Errno 2] No such file or directory: 'awk': 'awk'
对于我已经安装的所有其他命令,如tail、sed 等,也是如此。
我尝试了不同的方式来启动子进程,例如subprocess.run()、subprocess.call()。我也尝试使用shell=True 甚至executable='/bin/bash 参数。
对于 systemctl 方面,我尝试使用 systemctl start service_name --user 和各种配置组合在本地运行 - 例如更改进程类型、以 root 身份运行、不同的用户和组。
这是一个配置示例:
[Unit]
Description={{ project_name }} Service
After=network.target
[Service]
User={{ user }}
Group={{ user_group }}
Restart=always
RestartSec=1s
WorkingDirectory=/home/{{ user }}/{{ project_folder }}
ExecStart=/home/{{ user }}/{{ project_folder }}/virtualenv/bin/python start.py
[Install]
WantedBy=multi-user.target
【问题讨论】:
-
tail已经可以执行;你为什么要使用bash? -
请提供您有问题的
systemd服务内容 -
tail 在使用 systemd 运行时在子进程中不可执行,这就是我尝试这样做的原因。
-
我会尽快添加 systemd 服务,但它很标准。
-
您是否尝试过使用
tail的完整路径?
标签: python bash subprocess systemd systemctl