我在 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
,里面使用subprocess来打开gatttool
or hcitool
哪些在$PATH
(系统范围的二进制文件,通常位于 /usr/bin 中)。
所以现在我无法更改该库(我可以通过分叉它,但我希望我不必这样做)。
为什么 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)