Полный цикл в digital

Что такое службы (unit) в Linux

В операционной системе Linux, так же как и в Windows, кроме обычных программ, с которыми может взаимодействовать пользователь есть еще один вид программ. Это работающие в фоне службы. Важность служб тяжело переоценить, они следят за состоянием системы, обеспечивают автоматическое подключение внешних устройств и сети, позволяют процессам взаимодействовать с оборудованием, а также в виде служб реализованы различные веб-серверы и серверы баз данных.

Поскольку службы выполняются в фоновом режиме, вы не можете взаимодействовать с ними привычными способами.

Systemd система которая позволяет запускать службы параллельно учитывая зависимости между службами. Порядок запуска служб определяет сложное дерево зависимостей. После запуска системы Systemd собирает весь вывод службы в лог, и следит за ее работой, если служба аварийно завершилась, то автоматически ее перезапускает при необходимости. Вместе с подсистемой Systemd появилась команда systemctl.

Служба в Systemd описывается файлом unit, в нем описано каким образом эту службу надо запускать, а также как с ней себя вести.

Типы юнитов

Существуют такие типы юнитов:

  • service обычная служба, программа
  • target группа служб
  • automount точка автоматического монтирования
  • device файл устройства, генерируется на этапе загрузки
  • mount точка монтирования
  • path файл или папка
  • scope внешний процесс
  • slice группа системных служб systemd
  • snapshot сохраненное состояние запущенных служб
  • socket позволяет активировать службу по необходимости.

Все службы Systemd можно поделить на три группы, которые находятся в разных дирикториях:

  1. /usr/lib/systemd/system/ юниты, установленные с помощью пакетов RPM, DEB
  2. /run/systemd/system/ юниты, созданные в рантайме
  3. /etc/systemd/system/ юниты, созданные системным администратором

Кроме того, у Systemd есть задачи Jobs, они выполняются и видны только когда к какой нибудь службе применяется действие, например, запуск или остановка.

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

В подсистеме Systemd также можно легко создать собственную службу и использовать ее для автозапуска приложений или собственных скриптов. Для этого в каталоге /usr/lib/systemd/system создаем юнит, который по суте является файлом с расширением .service.

Как правило, файл разделен на 3 части:

  1. Unit позволяет определить метаданные для юнита
  2. Service раздел для основной конфигурации юнита
  3. Install определение поведения для юнита при его включении или отключении

Раздел Unit - декларация модуля и его свойства

  • Description описание модуля
  • After запуск модуля после запуска определенных служб
  • Requires указание что для запуска сервиса необходим другой запущенный сервис
  • Wants декларация что для запуска сервиса необходим другой запущенный сервис
  • Documentation источник Документация к сервису

Раздел Service - указание какими командами и под каким пользователем надо запускать сервис

  • Type тип сервиса
  • WorkingDirectory установка рабочего каталога, он делается текущим перед запуском стартап команд
  • User пользователь , под которым надо стартовать сервис
  • Group группа, под которым надо стартовать сервис
  • Environment переменные окружения
  • ExecStart команда для запуска сервиса
  • ExecStop команда для остановки сервиса
  • Restart указание, стратегии перезапуска сервиса
  • RestartSec время ожидания перед повторным запуском службы в секундах
  • StandardOutput указание, куда перенаправлять стандартный поток вывода
  • StandardError указание, куда перенаправлять поток ошибок
  • TimeoutStartSec таймаут перед запуском службы

Раздел Install - описание уровня запуска сервиса

  • WantedBy указание уровня запуска

Запуск сервиса

После внесения изменений и сохранения файла, необходимо перечитать изменения командой:

systemctl daemon-reload

Теперь можно разрешить автозапуск, для примера ниже, команда будет следующая:

systemctl enable gfagent

Пример юнита

gfagent.service [Unit]
Description=Gitflic-runner
After=gitflic.service
Requires=gitflic.service

[Service]
User=gitflic-agent
Group=gitflic-agent
WorkingDirectory=/home/gitflic-agent/gitflic-runner
ExecStart=/usr/bin/java -jar runner.jar start --config=config/application.properties
ExecStop=/bin/kill -s 15 $MAINPID
StandardOutput=journal
StandardError=journal
Restart=on-failure
RestartSec=10
TimeoutStartSec=2min

[Install]
WantedBy=multi-user.target
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг