【问题标题】:python initiated with systemd cannot start subprocess用systemd启动的python无法启动子进程
【发布时间】: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


【解决方案1】:

我不确定,但是很可能在一个配置行中设置环境在以下配置中没有考虑到。

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

【讨论】:

    猜你喜欢
    • 2015-11-19
    • 2020-08-21
    • 1970-01-01
    • 2020-05-11
    • 2018-12-11
    • 2015-11-17
    • 1970-01-01
    相关资源
    最近更新 更多