Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: запуск Python скрипта в качестве сервиса  (Прочитано 964 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kiruxa2010

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Всем привет.

Возникла проблема с сабжем. Есть телеграмм бот. При запуске в терминале все работает. Пытаюсь запустить в качестве сервиса, вылетает ошибка.
файл bot.service
[Unit]
Description=Bot
After=multi-user.target
Conflicts=getty@tty1.service

[Service]
Type=simple
ExecStart=/usr/bin/python3 /usr/bin/bot.py
StandardInput=tty-force
#Restart=always

[Install]
WantedBy=multi-user.target

при попытке запустить:
● bot.service - Bot
   Loaded: loaded (/lib/systemd/system/bot.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Tue 2021-04-20 16:46:11 MSK; 13min ago
  Process: 2303 ExecStart=/usr/bin/python3 /usr/bin/bot.py (code=exited, status=1/FAILURE)
 Main PID: 2303 (code=exited, status=1/FAILURE)

Apr 20 16:46:11 kirill_serv systemd[1]: Started Bot.
Apr 20 16:46:11 kirill_serv systemd[1]: bot.service: Main process exited, code=exited, status=1/FAILURE
Apr 20 16:46:11 kirill_serv systemd[1]: bot.service: Failed with result 'exit-code'.

Подскажите, где копать. Спасибо.

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3448
  • Ubuntu 22.04 х64
    • Просмотр профиля
Re: запуск Python скрипта в качестве сервиса
« Ответ #1 : 20 Апреля 2021, 17:09:38 »
ну как минимум покажите логи сервиса, чего падает journalctl -xe. Ну и вас не смущает, что Conflicts=getty@tty1.service и StandardInput=tty-force

Может Type=oneshot должно быть)
« Последнее редактирование: 20 Апреля 2021, 17:11:13 от EvangelionDeath »
Fujitsu UH552: Intel i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Samsung 860 EVO 250GB/Ubuntu Budgie 18.04
HP Pro 840 G3: Intel i5-6300U, 8GB DDR4 2133MHz, Intel 520, Intel Pro 2500 180GB/Ubuntu 22.04

Оффлайн ALiEN175

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5374
  • Сделай шаг и пройдешь милю
    • Просмотр профиля
Re: запуск Python скрипта в качестве сервиса
« Ответ #2 : 20 Апреля 2021, 18:06:28 »
journalctl -eu bot.service
« Последнее редактирование: 20 Апреля 2021, 18:26:48 от ALiEN175 »
ASUS P5K-C :: Intel Xeon E5450 @ 3.00GHz :: 8 GB DDR2 :: Radeon R7 260X :: XFCE
ACER 5750G :: Intel Core i5-2450M @ 2.50GHz :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн soarin

  • Старожил
  • *
  • Сообщений: 1850
  • ubuntu 20.04
    • Просмотр профиля
Re: запуск Python скрипта в качестве сервиса
« Ответ #3 : 20 Апреля 2021, 18:24:12 »
Много причин может. Допустим библиотеки поставлены pip-ом в чисто пользовательское окружение.

Оффлайн Smorman

  • Участник
  • *
  • Сообщений: 207
  • When In Rome, Do As The Romans Do...
    • Просмотр профиля
    • Диспетчерская служба - FinnWay
Re: запуск Python скрипта в качестве сервиса
« Ответ #4 : 20 Апреля 2021, 22:20:55 »
Подскажите

В случае с python, я не стал systemd использовать, а вместо него Supervisor.
Если не установлен, то установить его можно так:
Код: (php) [Выделить]
sudo apt install supervisor
На мой вкус, удобнее и проще.

Шикарно работает.

И не забывай, что твой скрипт надо сделать исполняемым:
Код: (php) [Выделить]
sudo chmod a+x /usr/bin/bot.py
После установки настраиваешь (базовые настройки) его конфиг под систему одной командой в Терминале:
(Нажмите, чтобы показать/скрыть)

Создаешь юнит-конфиг бота, например bot.conf в папке: /etc/supervisor/conf.d и перезапускаешь Supervisor:
(Нажмите, чтобы показать/скрыть)

Выглядеть он будет так:
(Нажмите, чтобы показать/скрыть)

Управлять можно через web-морду (если установлен LAMP) по адресу:
Код: (php) [Выделить]
localhost:9001или, если оного нет, в Терминале:
Код: (php) [Выделить]
sudo supervisorctlhelp - выведит список команд:
Код: (php) [Выделить]
supervisor> help

default commands (type help <topic>):
=====================================
add    exit      open  reload  restart   start   tail   
avail  fg        pid   remove  shutdown  status  update
clear  maintail  quit  reread  signal    stop    version

supervisor>

Т.е., чтобы увидеть статус вашего бота, после приглашения supervisor> вводите status 01-Bot и получите вывод:
Код: (php) [Выделить]
01-Bot                  RUNNING   pid 2613, uptime 3:32:47где RUNNING указывает на то, что всё Ок. Процесс запущен и работает.
Если будет ошибка, то и вывод будет ERROR

или просто в терминале вводите:
Код: (php) [Выделить]
sudo supervisorctl status - статус всех процессов Supervisor
или
Код: (php) [Выделить]
sudo supervisorctl status 01-Bot - статус конкретно вашего бота.

Лог bot.log будет лежать в папке:
/var/log
Полный путь лог-файла:
Код: (php) [Выделить]
/var/log/bot.log
И усё!
Всегда после старта/перезагрузки системы у тебя будет рабочий бот в фоне, в качестве сервиса.
« Последнее редактирование: 22 Апреля 2021, 10:09:56 от Smorman »
OS: Ubuntu 22.04 'Jammy Jellyfish' LTS + Unity (x86_64), Archlinux+Openbox, Android 7.1 (x86_64), W10 (x86_64)
PC: Lenovo H530, CPU: i5-4430 3.0, Video: nVidia PCI-X
SSHD: 1T, HDD: 500G, RAM: 16G, ODD

 

Страница сгенерирована за 0.046 секунд. Запросов: 25.