繁体   English   中英

用systemd初始化的python无法启动子进程

[英]python initiated with systemd cannot start subprocess

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

[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 ,该库在内部使用子gatttool打开$PATH (系统范围的二进制文件,通常在/ usr / bin中)中的gatttoolhcitool
所以现在我不能更改该库(可以通过分叉来实现,但我希望不必这样做)。

为什么systemd如果不使用绝对路径就无法生成python子进程? 没有systemd(从控制台运行),一切正常。

我不确定,但是以下配置很可能不会在一个配置行中设置环境。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM