Как создать службу 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
Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.
Вдохновлен www.tecmint.com
Комментарии (0)