Публикация в Linux
avatar
19 минут читать

Как создать свой systemd сервис в Linux Ubuntu 22.04

Как создать свой systemd сервис в Linux Ubuntu 22.04

Systemd - это мощная система инициализации и диспетчер служб для операционных систем Linux, созданная для оптимизации и упрощения управления различными системными компонентами и службами. 

Углубляться в мануал и различные варианты использования я не буду, я пошагово опишу как ее использовать на практике для конкретной задачи, в моем случае это автоматизация запуска Python приложений. 

И так предположим у вас уже есть приложение на Python, отладку оно прошло и нужно запускать в production, но docker использовать либо не хотим, либо он не нужен из за пары небольших сервисов. Тут как раз нам и приходят на помощь Systemd сервисы.

Создание сервиса

Для начала перейдем рабочую директорию (в любую), где вы привыкли работать например /home/user :

cd /home/user

Далее с помощью редактора nano создадим файл сервиса telegram-bot.service, у вас он может иметь любо значение name.service в зависимости от вашей задачи:

nano telegram-bot.service

telegram-bot.service:

[Unit]
Description=Telegram bot 1
After=network.target

[Service]
Type=simple
WorkingDirectory=/var/www/tb1
ExecStart=/bin/python3 /var/www/tb1/main.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Основные моменты:

Description=Telegram bot 1 - описание для нашего сервиса

WorkingDirectory=/var/www/tb1 - рабочая директория нашего приложения

ExecStart=/bin/python3 /var/www/tb1/main.py - указываем кому и что запускать, в данном случае говорим питону запустить main.py 

Restart=always - перезапускать всегда, когда сервис был остановлен, например после перегрузки сервера.

Далее копируем наш файл telegram-bot.service в /etc/systemd/system/ и устанавливаем права на файл:

cp telegram-bot.service /etc/systemd/system/telegram-bot.service

chmod 664 /etc/systemd/system/telegram-bot.service

Переходим в рабочую директорию сервисов и перечитатываем изменения:

cd /etc/systemd/system/

systemctl daemon-reload

Активируем и запускаем наш сервис:

systemctl enable /etc/systemd/system/telegram-bot.service

systemctl start telegram-bot.service

Проверяем работу сервиса:

systemctl status telegram-bot.service 

Если вы все сделали правильно то увидите что сервис активный и работает без ошибок:

Если остались вопросы или замечания по теме, можете писать в комментарии.

2 Комментарии

avatar
Гость
4 месяца назад

WorkingDirectory=/var/www/tb1 - рабочая директория, которую в следующей команде игнорируете, указывая полный путь.

Restart=always совсем не для того нужен. Ведь вы заенаблили сервис и при перезагрузке сервера он и так запустится.

Если Вы привыкли постоянно работать из под рута, то да, вы легко скопируете файл в /etc/systemd/system, но это вопиющая безграмотность и наплевательство на безопасность.

Раз уж в команде systemctl enable /etc/systemd/system/telegram-bot.service указываете полный путь, то почему бы не заенаблить сразу из каталога пользователя?

Ах да! У вас же WantedBy=multi-user.target, но почему-то сервис туда не стал.

В обСЧем кулхаЦкер, удачи Вам! И успешных наступаний на собственные грабли.

avatar
Печеницын Петр Автор
4 месяца назад

Спасибо за конструктивную критику, статью поправлю