Не могу понять в чем проблема перезапуска бота через systemd?

В интернете определенно много статей о решении этой проблемы, но ни одна из них мне не помогает. Столкнулся с такой проблемой, что получаю ошибку «status = 203 / EXEC» при запуске бота на сервере. Для примера мне пока что нужно запустить от root.

Файл bot.service:

[Unit]
Description=Mybot - Telegram bot
After=syslog.target
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/home/myname/bot/  
ExecStart=/usr/lib/python3 /home/myname/bot/bot_example.py
RestartSec=60
Restart=always

[Install]
WantedBy=multi-user.target

Не уверен, что правильно указал путь к ExecStart к интерпретатору, но, как указывают в примерах - стоит писать: /usr/bin/python3, но у меня не существует такого пути, по крайней мере ../python3 зато существует путь /usr/lib/python3, который я указал уже в исполняемом скрипте (chmod +x script.py) первой линией Шебанга - #!/usr/lib/python3, но я все равно получаю эту ошибку. Укажите, пожалуйста, почему я не могу запустить свой скрипт на сервере?

OS - Linux Ubuntu 18.04.4


Ответы (1 шт):

Автор решения: Denis Rudnitskiy

Отдельное спасибо @andreymal, который помог разобраться в этом.

Крайне НЕ рекомендуется запускать бота от имени root.

Чтобы быстро решить вашу проблему:

1.Отредактировать ранее созданный файл bot.service (или любое другое имя), в директории /etc/systemd/system, в котором нужно обязательно правильно указать пользователя, от которого будет запускаться служба.

[Unit]
Description=Mybot - Telegram bot
After=syslog.target
After=network.target

[Service]
Type=simple
User=yourname #ваш пользователь
WorkingDirectory=/home/yourname/bot/  
ExecStart=/usr/bin/python3 /home/yourname/bot/bot_example.py #1 путь к интерпретатору, 2 путь к вашему скрипту
RestartSec=60
Restart=always

[Install]
WantedBy=multi-user.target
  1. Указать линию Шебанга в своем скрипте 1 строкой. Это путь к вашему интерпретатору.

#!/usr/bin/python3

Чтобы в этом удостовериться - введите в консоль следующую команду:

which python3

  1. При каждом внесении в bot.service не забывать вводить команду - systemctl daemon-reload.

Если что-то идет не так, или бот не запустился, смотрим логи (где будет указана ваша ошибка) такой командой:

journalctl -u bot --since=-1h.

В этом журнале я смог обнаружить свою ошибку - что неправильно указан путь к интерпретатору и что не установлен пакет telebot - пакет не был установлен из-за того, что служба systemdи pip3 запускались не от одного и того же пользователя.

→ Ссылка