我在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
,它使用子进程打开gatttool
或hcitool
$PATH
(系统范围的二进制文件,通常是在/ usr / bin)。
所以现在我不能改变那个库(我可以通过分叉,但我希望我没有)。
为什么systemd不能在不使用绝对路径的情况下生成python子进程?没有systemd(从控制台运行),一切正常。
答案 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