LINUX.ORG.RU
ФорумAdmin

Как решить проблему при создании сервиса из пайтон скрипта

 , ,


0

1

Есть телеграм бот написанный на пайтоне. Т.к. используются библиотеки ищпольую venv. Создал /etc/systemd/system/fin_tracker.service

[Unit]
Description=Fin tracker telegram bot
After=network.target

[Service]
ExecStart=/home/maksim/apps/tg_bots/fin_tracker/ftb_venv/bin/python /home/maksim/apps/tg_bots/fin_tracker/main.py
Restart=always
User=maksim
Group=maksim
WorkingDirectory=/home/maksim/apps/tg_bots/fin_tracker

[Install]
WantedBy=multi-user.target

Далее sudo systemctl start fin_tracker sudo systemctl status fin tracker

× fin_tracker.service - Fin tracker telegram bot
     Loaded: loaded (/etc/systemd/system/fin_tracker.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Sun 2024-09-29 15:09:39 MSK; 1min 6s ago
   Duration: 10ms
    Process: 11586 ExecStart=/home/maksim/apps/tg_bots/fin_tracker/ftb_venv/bin/python /home/maksim/apps/tg_bots/fin_tracker/main.py (code=exited, status=203/EXEC)
   Main PID: 11586 (code=exited, status=203/EXEC)
        CPU: 9ms

Sep 29 15:09:39 homeserver59 systemd[1]: Started fin_tracker.service - Fin tracker telegram bot.
Sep 29 15:09:39 homeserver59 systemd[1]: fin_tracker.service: Main process exited, code=exited, status=203/EXEC
Sep 29 15:09:39 homeserver59 systemd[1]: fin_tracker.service: Failed with result 'exit-code'.
Sep 29 15:09:39 homeserver59 systemd[1]: fin_tracker.service: Scheduled restart job, restart counter is at 5.
Sep 29 15:09:39 homeserver59 systemd[1]: fin_tracker.service: Start request repeated too quickly.
Sep 29 15:09:39 homeserver59 systemd[1]: fin_tracker.service: Failed with result 'exit-code'.
Sep 29 15:09:39 homeserver59 systemd[1]: Failed to start fin_tracker.service - Fin tracker telegram bot.

При этом когда я создаю сервис из пайтон скрипта без зависимостей и выбираю интерпретатор пайтон bin/python все работает. Как решить проблему

Не пайтон а питон.

И не надо делать системные сервисы из юзерских прог. Если так хочется возиться с системг - то делай его как юзер-сервис (systemd --user и конфиги в другом месте).

Если хочешь системный - то клади его в отдельное место (никаких /home) и без доступа к нему обычного залогиненого юзера.

firkax ★★★★★
()

Что в логах? sudo journalctl -u fin_tracker

masa
()
Ответ на: комментарий от firkax

Не пайтон а питон.

Серьёзно?..

И не надо делать системные сервисы из юзерских прог. Если так хочется возиться с системг - то делай его как юзер-сервис (systemd –user и конфиги в другом месте).

Если хочешь системный - то клади его в отдельное место (никаких /home) и без доступа к нему обычного залогиненого юзера.

А вот тут плюсую.

CrX ★★★★★
()

Правильно питон. Пайтон - это безграмотные филологини перевели в говно-курсах. В гноме есть GNOME Schedule для неосиляторов

Ты бы для начала запусстил скрипт из сосноли:

/home/maksim/apps/tg_bots/fin_tracker/ftb_venv/bin/python /home/maksim/apps/tg_bots/fin_tracker/main.py

И исправил ошибки

rtxtxtrx
()

Напиши шелл-скриптик, в нем вызывай activate твоей venv и запускай питон скрипт. А шелл скрипт уже укажи в systemd-юните

cobold ★★★★★
()
Ответ на: комментарий от firkax

Не пайтон а питон.

Боюсь расстроить, но как раз наоборот. 😊

frunobulax ★★★
()
Ответ на: комментарий от upcFrost

Если это бот для телеги - как вариант может быть selinux

Мог бы быть, но в тегах ubuntu.

Хотя всё равно стоило бы положить всё это в /opt.

ivanov17
()

Удивительно, конечно: никто не подсказал топикстартеру, что запущенный таким образом python ничего знать не знает о своём виртуальном окружении и что в каком-то окружении надо искать какие-то библиотеки.

У тебя в bin/activate есть переменные окружения. Загляни туда.

UPD: Был неправ, @cobold вспомнил. Только ради переменной окружения наворачивать слои и вызывать activate из шелл-скрипта не стоит, есть же Environment=.

ivanov17
()
Последнее исправление: ivanov17 (всего исправлений: 1)
Ответ на: комментарий от ivanov17

запущенный таким образом python ничего знать не знает о своём виртуальном окружении и что в каком-то окружении надо искать какие-то библиотеки

Где находится site-packages от venv он прекрасно знает. Чтобы убедиться, достаточно посмотреть venv/bin/python -c "import sys; print('\n'.join(sys.path))"

annulen ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.