Как создать службу Systemd в Linux

Systemd – это современный программный комплекс, обеспечивающий работу многих компонентов системы, включая менеджер сервисов. Он совместим со сценариями запуска SysV и LSB и работает как замена sysvinit. Более подробнее как работать со службами в Linux здесь

Служба systemd состоит из юнитов (юниты – это представление службы и системных ресурсов, таких как устройства, сокеты, точки монтирования и т.д.). Юниты пользовательских служб должны храниться в каталоге /etc/systemd/system/ и иметь расширение .service. Например, пользовательский сервис test-app использует /etc/systemd/system/test-app.service.

Файл юнита – это обычный текстовый файл ini-стиля, который обычно включает три общих раздела.

Первая секция – это обычно секция Unit, которая несет общую информацию об устройстве, не зависящую от типа устройства.

Вторая секция – это секция типа устройства, для сервиса это секция Service.

И третья – это раздел Install, который содержит информацию об установке устройства.

В этом руководстве мы покажем, как создать новую службу для systemd и управлять ею с помощью команд в Linux.

Создание пользовательского файла службы Systemd в Linux

Чтобы запустить приложение, программу или скрипт в качестве службы под управлением systemd, вы можете создать новую службу systemd (юнит для нее) следующим образом. Начните с создания файла unit службы с именем test-app.service (не забудьте заменить test-app на фактическое имя вашей службы или приложения) в /etc/systemd/system/:

vi /etc/systemd/system/test-app.service

Следующая конфигурация используется для определения службы для запуска приложения Flask с помощью Gunicorn, HTTP-сервера Python WSGI для UNIX.

[Unit]
Description=Gunicorn daemon for serving test-app
After=network.target
[Service]
User=root
Group=root
WorkingDirectory=/apps/test-app/
Environment="PATH=/apps/test-app/bin"
ExecStart=/apps/test-app/bin/gunicorn --workers 9  -t 0  --bind 127.0.0.1:5001 -m 007 wsgi:app --log-level debug --access-logfile /var/log/gunicorn/test_app_access.log --error-logfile /var/log/gunicorn/test_app_error.log
ExecReload=/bin/kill -s HUP $MAINPID
RestartSec=5
[Install]
WantedBy=multi-user.target

Давайте кратко опишем каждую директиву конфигурации в приведенной выше конфигурации:

  • Description – используется для указания описания службы.
  • After – определяет связь со второй единицей, network.target. В данном случае сервис test-app.service активируется после блока network.target.
  • User – используется для указания пользователя, с правами которого будет запущена служба.
  • Group – используется для указания группы, с правами которой будет запущена служба.
  • WorkingDirectory – используется для установки рабочего каталога для выполняемых процессов.
  • Environment – используется для установки переменных окружения для выполняемых процессов.
  • ExecStart – используется для определения команд с аргументами, которые будут выполняться при запуске данной службы.
  • ExecReload – используется для определения команд, выполняемых для запуска перезагрузки конфигурации в службе.
  • WantedBy – позволяет создать символическую ссылку в каталоге .wants/ или .requires/ каждого из перечисленных устройств, multi-user.target в данном случае, когда блок test-app.service включен с помощью команды systemctl enable.

Вы можете найти все параметры конфигурации сервисного блока, хорошо описанные в документации.

Сохраните файл блока и закройте его. Затем перезагрузите systemd с этим новым файлом сервисного блока, выполнив:

systemctl daemon-reload command

Не забывайте всегда выполнять эту команду после редактирования файла блока.

Управление службой Systemd в Linux

Для запуска/активации службы выполните команду systemctl следующим образом:

systemctl start test-app.service

Для проверки, запущена служба или нет, выполните команду systemctl, как показано на рисунке.

systemctl status test-app.service

Для включения службы для запуска при загрузке системы, используйте команду systemctl enable. Проверить, была ли служба включена, можно с помощью команды systemctl is-enable следующим образом:

systemctl enable test-app.service
systemctl is-enabled test-app.service

Альтернативно можно включить и запустить службу одновременно, как показано на рисунке.

systemctl enable --now test-app.service

Чтобы остановить/деактивировать службу, выполните команду systemctl stop следующим образом:

systemctl stop test-app.service

Чтобы перезапустить службу, выполните команду systemctl restart следующим образом:

systemctl restart test-app.service

Вы также можете отключить службу, чтобы предотвратить ее запуск при загрузке системы, используя команду systemctl disable. Проверить, была ли служба включена, можно с помощью команды systemctl is-enable следующим образом:

systemctl disable test-app.service
systemctl is-disabled test-app.service

Альтернативно, можно отключить и остановить службу одновременно, как показано на рисунке.

systemctl disable --now test-app.service

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.tecmint.com

Похожие статьи

Комментарии (0)