Не могу понять в чем проблема перезапуска бота через 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 шт):
Отдельное спасибо @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 строкой. Это путь к вашему интерпретатору.
#!/usr/bin/python3
Чтобы в этом удостовериться - введите в консоль следующую команду:
which python3
- При каждом внесении в
bot.serviceне забывать вводить команду -systemctl daemon-reload.
Если что-то идет не так, или бот не запустился, смотрим логи (где будет указана ваша ошибка) такой командой:
journalctl -u bot --since=-1h.
В этом журнале я смог обнаружить свою ошибку - что неправильно указан путь к интерпретатору и что не установлен пакет telebot - пакет не был установлен из-за того, что служба systemdи pip3 запускались не от одного и того же пользователя.