У меня есть сценарий Python, который я обычно запускаю с помощью этой команды:
(environment) python run.py
Я хочу запустить этот скрипт при запуске. (Я использую Ubuntu) Вот мой сервис:
[Unit]
Description=My Script Service
After=multi-user.target
[Service]
Type=idle
ExecStart=/home/user/anaconda3/bin/python /home/user/space/run.py
[Install]
WantedBy=multi-user.target
Кстати, я не мог запустить этот скрипт, но я мог запустить любой скрипт, который не находится внутри среды. Как я могу запустить скрипт Python при запуске (virtualenv)?
sudo systemctl status user_sent
● user_sent.service - Mail Service
Loaded: loaded (/lib/systemd/system/user_sent.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since xxxxx 16:30:20 MSK; 3s ago
Process: 3713 ExecStart=/usr/bin/python run.py (code=exited, status=200/CHDIR)
Main PID: 3713 (code=exited, status=200/CHDIR)
python
systemd
daemon
virtualenv
жасмин
источник
источник
/usr/bin/python run.py
см stackoverflow.com/questions/37211115/... и unix.stackexchange.com/questions/278188/.../path/to/your/virtualenv/bin/python
Ответы:
Ваш файл модуля правильный. Если вы хотите запустить любой файл python под venv, вам просто нужно сослаться на двоичный файл python в каталоге venv, как вы это делали с
/home/user/anaconda3/bin/python
То, что торчит, является причиной, по которой ваше устройство выходит из строя
code=exited, status=200/CHDIR
. Скорее всего, это указывает на проблему в вашем скрипте.Если вы хотите отладить это, вы должны сделать следующее:
ExecStart=
точно так же, как root, чтобы увидеть, вызвана ли проблема вашим скриптом.journalctl -u <unit_name>
. Это должно дать вам больше информации о проблемах с вашим подразделением.Пост скриптум
Оба следующих
[Service]
варианта работают:или
Разница лишь в том, что относительные вызовы в вашем скрипте выполняются из разных каталогов. Так что если ваш скрипт содержит строку
open("my_file", "w")
, то в первом примере он создаст файл,/my_file
а во втором - файл/home/user/space/my_file
.источник