Systemd: Примеры создания сервиса

Linux Logo Settings

Большинство дистрибутивов Linux используют systemd в качестве менеджера систем и сервисов.

systemctl - это основная команда в systemd, используемая для управления службами.

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

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

Создание файла службы Systemd

Создайте файл службы systemd /etc/systemd/system/test-daemon.service (замените test-daemon на имя вашей службы):

Откройте файл test-daemon.service и добавьте минимальные параметры конфигурации сервиса, которые позволяют управлять этим сервисом через systemctl:

Путь к демону: Если вы не знаете полный путь к демону, попробуйте использовать test-daemon.

После изменения служебного файла необходимо перезагрузить конфигурацию systemd:

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

Чтобы настроить службу на автоматический запуск при загрузке, необходимо включить ее:

Чтобы проверить журналы службы, выполните:

Параметры служебного файла Systemd

Служебные файлы Systemd обычно состоят из трех разделов.

Общие элементы конфигурации настраиваются в общих разделах [Unit] и [Install].

Параметры конфигурации конкретной службы настраиваются в разделе [Service].

Важные параметры секции [Unit]

Опция Описание
Description Краткое описание демона
Documentation Список URI, ссылающихся на документацию.
Before, After Порядок, в котором запускаются подразделения.
Requires Если это подразделение активируется, то будут активированы и перечисленные здесь подразделения. Если один из других блоков деактивируется или не работает, этот блок будет деактивирован.
Wants Настраивает более слабые зависимости, чем Requires. Если какое-либо из перечисленных устройств не запускается успешно, это не влияет на активацию устройства. Это рекомендуемый способ установки пользовательских зависимостей между подразделениями.
Conflicts Если у одного блока есть настройка Conflicts для другого блока, запуск первого остановит второй, и наоборот.

Полный список опций раздела [Unit]:

Важные параметры раздела [Install]

Опции Описание
Alias Список дополнительных имен для устройства, разделенных пробелами. Большинство команд systemctl, за исключением systemctl enable, могут использовать псевдонимы вместо фактического имени устройства.
RequiredBy, WantedBy Текущая служба будет запущена, когда будут запущены перечисленные службы. Подробности см. в описании Wants и Requires в разделе [Unit].
Also Указывает список устройств, которые будут включены или отключены вместе с данным устройством, когда пользователь запускает systemctl enable или systemctl disable.

Полный список опций раздела [Install]:

Важные опции раздела [Service]

Опция Описание
Type Настраивает тип запуска процесса. Один из:
простой (по умолчанию) - запускает службу немедленно. Предполагается, что главный процесс службы определен в ExecStart.
forking - считает, что служба запущена, как только процесс forks и родительский процесс завершился.
oneshot - аналогичен простому, но предполагается, что процесс должен завершиться до того, как systemd запустит последующие блоки (полезно для сценариев, которые выполняют одно задание и затем завершаются). Вы можете установить RemainAfterExit=yes, чтобы systemd считал службу активной после завершения процесса.
dbus - аналогично simple, но считает, что служба запущена, когда основной процесс получает имя D-Bus.
notify - аналогично простому, но служба считается запущенной только после отправки специального сигнала в systemd.
idle - аналогично simple, но фактическое выполнение бинарного файла службы откладывается до тех пор, пока все задания не будут завершены.
ExecStart Команды с аргументами для выполнения при запуске службы. Type=oneshot позволяет указать несколько пользовательских команд, которые затем выполняются последовательно. ExecStartPre и ExecStartPost задают пользовательские команды, которые будут выполняться до и после ExecStart.
ExecStop Команды, которые необходимо выполнить для остановки службы, запущенной через ExecStart.
ExecReload Команды, которые необходимо выполнить, чтобы вызвать перезагрузку конфигурации в службе.
Restart Если эта опция включена, служба будет перезапущена, когда процесс службы завершается, убивается или достигается таймаут, за исключением обычной остановки командой systemctl stop.
RemainAfterExit Если установлено значение True, служба считается активной, даже если все ее процессы завершились. Используется при Type=oneshot. Значение по умолчанию - False.

Полный список опций раздела [Service]:

Примеры файлов служб Systemd

Дополнительные примеры можно найти на страницах руководства systemd.service и systemd.unit.

Avatar for Gnostis
Gnostis
Добавить комментарий