用systemd启动的python无法启动子进程

时间:2018-01-21 20:15:13

标签: python subprocess systemd

我在virtualenv中有一个python脚本,它是使用systemd启动的。

[Unit]
Description=app
After=network.target

[Service]
Type=simple
User=user
Group=user
Environment=VIRTUAL_ENV=/home/user/Projects/app/venv
Environment=PATH=$VIRTUAL_ENV/bin:$PATH
WorkingDirectory=/home/user/Projects/app
ExecStart=/home/user/Projects/app/venv/bin/python app.py

[Install]
WantedBy=multi-user.target

问题是该脚本使用subprocess.Popen(['python', 'whatever.py'])打开另一个python脚本。我找到了一个未找到的错误,并发现应该使用绝对路径调用python,所以我更改了它并且它运行良好。

但是,现在我使用了第三方库pygatt,它使用子进程打开gatttoolhcitool $PATH(系统范围的二进制文件,通常是在/ usr / bin)。
所以现在我不能改变那个库(我可以通过分叉,但我希望我没有)。

为什么systemd不能在不使用绝对路径的情况下生成python子进程?没有systemd(从控制台运行),一切正常。

1 个答案:

答案 0 :(得分:2)

我不确定,但在以下配置行中设置环境很可能不会被考虑在内。

Environment=VIRTUAL_ENV=/home/user/Projects/app/venv
Environment=PATH=$VIRTUAL_ENV/bin:$PATH

此处,您希望将VIRTUAL_ENV设置为$VIRTUAL_ENV,并将其评估为下一行,但这可能无效。我会尝试硬编码第二行:

Environment=VIRTUAL_ENV=/home/user/Projects/app/venv
Environment=PATH=/home/user/Projects/app/venv/bin:$PATH