У меня есть сценарий 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 под Venv вам просто нужно сослаться на двоичный файл python в Venv каталог, как вы это сделали с /home/user/anaconda3/bin/python
[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
Что бросается в глаза, так это причина отказа вашего устройства: code=exited, status=200/CHDIR
. Скорее всего, это указывает на проблему в вашем скрипте.
Если вы хотите отладить это, вы должны сделать следующее:
ExecStart=
точно так же, как это под root, чтобы увидеть, не вызвана ли проблема вашим скриптом.journalctl -u <unit_name>
. Это должно дать вам дополнительную информацию о проблемах с вашим устройством.Пост скриптум
Оба следующих [Service]
варианты работы:
ExecStart=/home/user/anaconda3/bin/python /home/user/space/run.py
или
WorkingDirectory=/home/user/space
ExecStart=/home/user/anaconda3/bin/python run.py
Единственная разница в том, что относительные вызовы в вашем скрипте выполняются из разных каталогов. Итак, если ваш скрипт содержит строку open("my_file", "w")
, в первом примере будет создан файл /my_file
а второй файл /home/user/space/my_file
.