У меня есть скрипт python внутри virtualenv, который запускается с помощью 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 (запускается из консоли) все работает.
$VIRTUAL_ENV
оценивается в вашем файле конфигурации? может надо поставитьEnvironment=PATH=/home/user/Projects/app/venv/bin:$PATH
- person Jean-François Fabre   schedule 21.01.2018