@Dato38it

Как запустить телеграм бота службами systemctl?

Как мне запускать и отключить бота утилитой systemd?
Я пробовал сделать так:
root@kvmubuntu:~# ls /home/tuser/dato38itbot/
main.py  requirements.txt  telegaenv
root@kvmubuntu:~# vim /etc/systemd/system/dato38itbot.service
root@kvmubuntu:~# cat /etc/systemd/system/dato38itbot.service
[Unit]
Description=Telegram bot
After=network.target
[Service]
ExecStart=/usr/bin/python3 /home/tuser/dato38itbot/main.py
[Install]
WantedBy=multi-user.target
[Install]
WantedBy=multi-user.target
root@kvmubuntu:~# systemctl daemon-reload
root@kvmubuntu:~# systemctl enable dato38itbot.service
Created symlink /etc/systemd/system/multi-user.target.wants/dato38itbot.service → /etc/systemd/system/dato38itbot.service.
root@kvmubuntu:~# systemctl start dato38itbot.service
root@kvmubuntu:~# systemctl status dato38itbot.service
× dato38itbot.service - Telegram bot
     Loaded: loaded (/etc/systemd/system/dato38itbot.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2024-09-03 15:09:34 MSK; 4s ago
    Process: 3848 ExecStart=/usr/bin/python3 /home/tuser/dato38itbot/main.py (code=exited, status=1/FAILURE)
   Main PID: 3848 (code=exited, status=1/FAILURE)
        CPU: 127ms
Sep 03 15:09:33 kvmubuntu.net systemd[1]: Started Telegram bot.
Sep 03 15:09:34 kvmubuntu.net python3[3848]: Traceback (most recent call last):
Sep 03 15:09:34 kvmubuntu.net python3[3848]:   File "/home/tuser/dato38itbot/main.py", line 1, in <module>
Sep 03 15:09:34 kvmubuntu.net python3[3848]:     import psycopg2
Sep 03 15:09:34 kvmubuntu.net python3[3848]: ModuleNotFoundError: No module named 'psycopg2'
Sep 03 15:09:34 kvmubuntu.net systemd[1]: dato38itbot.service: Main process exited, code=exited, status=1/FAILURE
Sep 03 15:09:34 kvmubuntu.net systemd[1]: dato38itbot.service: Failed with result 'exit-code'.

Видно, что ругается на модуль psycopg2. Но Main.py подключен уже к библиотеке. Его тоже надо как то подключить к systemd? также и остальные библиотеки? и нужны ли какие-то права? потому что сам телеграмм бот запускается под обычным пользователем, а systemd у меня под рутом. может быть в этом проблема?
Пробовал еще так писать
[Unit]
Description=Bot
After=syslog.target
After=network.target

[Service]
Type=simple
User=dato
WorkingDirectory=/home/tuser/dato38itbo
ExecStart=/usr/bin/python3 /home/tuser/dato38itbot/main.py
Restart=always

[Install]
WantedBy=multi-user.target
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
@Dato38it Автор вопроса
Вот как правильно:
[Unit]
Description=Telegram dato38it-bot
After=network.target
[Service]
User=tuser
Group=tuser
WorkingDirectory=/home/tuser/dato38itbot/
VIRTUAL_ENV=/home/tuser/dato38itbot/telegaenv
Environment=PATH=$VIRTUAL_ENV/bin:$PATH
ExecStart=/home/tuser/dato38itbot/telegaenv/bin/python /home/tuser/dato38itbot/main.py
Restart=on-failure
[Install]
WantedBy=multi-user.target
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vitaly_il1
DevOps Consulting
Скорее всего, вы используете virtualenv или т.п. - если да, то надо активировать его.
Проверить просто - попробуйте запустить в новом терминале

/usr/bin/python3 /home/tuser/dato38itbot/main.py
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы