【发布时间】:2018-01-21 20:15:12
【问题描述】:
我在使用 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 或hcitool,它们位于$PATH(系统范围的二进制文件,通常在/usr/bin 中)。
所以现在我不能改变那个库(我可以通过分叉它,但我希望我不必这样做)。
为什么 systemd 不能在不使用绝对路径的情况下生成 python 子进程?没有 systemd(从控制台运行),一切正常。
【问题讨论】:
-
您确定在您的配置文件中评估了
$VIRTUAL_ENV吗?也许你必须把Environment=PATH=/home/user/Projects/app/venv/bin:$PATH
标签: python subprocess systemd