systemd_service
Роль Ansible для службы systemd
Это роль Ansible, которая создает и настраивает файлы unit
служб systemd
. Она позволяет автоматически запускать определенные службы в фоновом режиме, включать и отключать их для конкретных событий, управлять группами процессов и настраивать зависимости от других единиц.
Роль включает в себя следующие задачи:
- Создать файл службы systemd в
/etc/systemd/system/
с указанным именемservice_name
.service для каждого элементаsystemd_service
. - Настроить важные параметры секций Unit, Service и Install.
- Уведомить systemd о том, что новые файлы службы существуют. Перезапустить службу.
- Включить автоматический запуск службы при загрузке, если это необходимо.
Эта роль может быть запущена на всех версиях Ubuntu.
Требования
Для выполнения этой роли требуется доступ root, поэтому либо запустите ее в плейбуке с глобальным параметром become: yes
, либо вызовите роль в вашем плейбуке следующим образом:
- hosts: apps
roles:
- role: systemd-service
become: yes
Переменные роли
Все необходимые службы могут быть указаны с помощью переменной-словаря systemd_service
(см. defaults/main.yml
):
systemd_service: {}
Для каждой службы необходимо задать service_name
и необходимые значения параметров. Например, чтобы указать, должна ли служба запускаться при загрузке, используйте параметр enabled
.
systemd_service:
service_name:
enabled:
Все остальные доступные параметры, которые должны быть указаны для конкретного ключа service_name
(в виде вложенных параметров), приведены ниже.
Параметры секции Unit
Эта группа параметров включает общую информацию о единице.
description: # Свободная строка, описывающая единицу
Следующие два параметра настраивают зависимости от других единиц. Если служба активируется, перечисленные там единицы также будут активированы. Если одна из единиц requires
не может быть запущена или неожиданно завершает работу, служба также будет остановлена. Что касается списка wants
, служба не будет остановлена, если какая-то единица из него будет деактивирована. Параметры могут состоять из нескольких имен единиц, разделенных пробелами. Их также можно указывать несколько раз.
requires: # Единицы, которые должны быть запущены вместе со службой
wants: # Единицы, которые должны быть запущены вместе со службой
Для настройки порядка, в котором службы запускаются или останавливаются, используйте следующие параметры. Обратите внимание, что если между единицами нет зависимостей по порядку, они останавливаются или запускаются одновременно. Оба параметра устанавливаются в виде списков единиц, разделенных пробелами.
after: # Единицы, которые должны быть запущены после службы
before: # Единицы, которые должны быть запущены до службы
Параметры секции Service
Эта секция включает информацию о службе и процессе, который она контролирует. Параметр type
настраивает тип запуска процесса для этой единицы службы.
type:
Он может принимать значения:
simple
- этот тип предполагает, что служба будет запущена немедленно. Процесс не должен ветвиться. Не используйте этот тип, если другие службы зависят от запуска этой службы. Если служба предоставляет функциональность другим процессам на системе, ее каналы связи должны быть установлены до запуска демона.forking
- предполагает, что служба запускается один раз, и процесс ветвится по завершении родительского процесса. Этот тип используется для запуска классических демонов. Если используется этот режим, рекомендуется установить параметрpid_file
(см. ниже), чтобы systemd мог идентифицировать основной процесс демона.
Другие значения имеют поведение, аналогичное значению simple. Однако у них есть некоторые различия:
oneshot
- ожидается, что служба завершится до того, как systemd начнет последующие единицы;dbus
- предполагается, что демон получает имя в шинеD-Bus
;notify
- демон отправляет уведомление черезsd_notify(3)
или аналогичный вызов, когда он завершил запуск;idle
- фактическое выполнение бинарного файла службы откладывается до тех пор, пока все активные задачи не будут выполнены. Обратите внимание, что этот тип полезен только для улучшения вывода в консоль, он не полезен в качестве общего инструмента упорядочивания единиц.
Установите путь к PID-файлу, чтобы использовать тип запуска forking
.
pid_file: # Указывает абсолютное имя файла, указывающего на PID-файл этого демона
Вы можете указать пользователя UNIX и группу, под которыми должна выполняться служба. Параметры принимают одно имя пользователя или группы, или численный ID в качестве значения. Для системных служб и для пользовательских служб пользователя root по умолчанию используется root
, который может быть изменен на другой. Для пользовательских служб любого другого пользователя смена идентичности пользователя не допускается. Таким образом, единственное разрешенное значение - это тот же пользователь, от имени которого работает менеджер служб пользователя. Если группа не установлена, используется группа по умолчанию для пользователя.
user:
group:
Установите приоритет планирования для единицы с помощью следующего параметра. Он принимает целое число от -20 (высший приоритет) до 19 (самый низкий приоритет).
nice: # Уровень приоритета по умолчанию для службы
Уровень корректировки для убийцы памяти (Out-Of-Memory killer) для процесса указывается с помощью следующей опции. Он принимает целое значение от -1000 (отключить OOM-убийцу) до 1000 (OOM-убийца предпочтителен).
oom_score_adjust:
Следующие параметры позволяют вам указать команды, которые будут выполняться в зависимости от состояния вашей службы. Параметры могут использоваться несколько раз или их значения могут включать несколько команд. Несколько команд могут быть объединены в одну директиву, разделив их точками с запятой. Команда для выполнения должна быть абсолютным путем. Она может содержать пробелы, но контрольные символы не допускаются. Для каждой команды первым аргументом должен быть абсолютный путь к исполняемому файлу. Пустая строка сбросит список команд, указанных ранее для параметра.
# Команды, которые выполняются, когда эта служба запускается
# Если `type` не `oneshot`, здесь должна быть указана ровно одна команда
exec_start:
# Команды, которые выполняются перед командами `exec_start`
exec_start_pre:
# Команды, которые выполняются после команд `exec_start`
exec_start_post:
# Команды для выполнения для остановки службы, запущенной через `exec_start`
exec_stop:
# Команды, которые выполняются после остановки службы
exec_stop_post:
# Команды для выполнения для перезагрузки конфигурации в службе
exec_reload:
Установите, должна ли служба перезапускаться, когда процесс службы (основной процесс службы или тот, который указан параметрами 'exec_start_pre', 'exec_start_post', 'exec_stop', 'exec_stop_post' или 'exec_reload') завершится, будет убит или истечет время ожидания. Параметр restart
принимает одно из следующих значений:
no
(по умолчанию) - служба не будет перезапущена;on-success
- служба будет перезапущена только тогда, когда процесс службы завершится чисто (с кодом выхода 0 или одним из сигналов SIGHUP, SIGINT, SIGTERM или SIGPIPE);on-failure
- служба будет перезапущена, когда процесс завершится с ненулевым кодом выхода, будет завершен сигналом, когда операция превысит время ожидания и когда будет вызван тайм-аут контроля;on-abnormal
- служба будет перезапущена, когда процесс будет завершен сигналом, когда операция превысит время ожидания или когда будет вызван тайм-аут контроля;on-watchdog
- служба будет перезапущена только если процесс службы завершится из-за непойманного сигнала, не указанного как чистый статус выхода;on-abort
- служба будет перезапущена только если истекет тайм-аут контроля для этой службы;always
- служба будет перезапущена в любом случае.
# Когда служба должна быть перезапущена
restart:
Вы можете указать задержку для вышеупомянутых команд с помощью следующих параметров. Они принимают значение в секундах или значение временного интервала, например '5min 20s'. Параметр restart_sec
настраивает время ожидания перед перезапуском службы (как настроено с restart
). Опция timeout_sec
определяет время ожидания для обработки команд на старт/остановку.
restart_sec:
timeout_sec:
Используйте параметр environment
, чтобы установить список переменных окружения для выполняемых процессов. Он включает в себя список переменных и их значений, разделенных пробелами. Параметр может использоваться несколько раз. Если этой опции присвоено пустое значение, список переменных окружения будет сброшен. Если значение содержит пробел, используйте двойные кавычки для присвоения.
Вы также можете читать переменные окружения из текстового файла. Для этого установите значение параметра environment_file
как путь к файлу.
environment: # Список присвоений переменных, разделенных пробелами
environment_file: # Путь к файлу с переменными окружения
Рабочий каталог указывается следующим параметром. Он устанавливается как текущий перед запуском команд старта.
working_directory:
Следующие параметры позволяют выбрать, куда должны быть подключены дескрипторы файлов (STDIN, STDOUT, STDERR) выполняемых процессов. Параметр standard_input
принимает значения "null", "tty", "tty-force", "tty-fail", "socket" или "fd". Параметр standard_output
может быть равен "inherit", "null", "tty", "journal", "syslog", "kmsg", "journal+console", "syslog+console", "kmsg+console", "socket" или "fd". Доступные значения для standard_error
идентичны standard_output
.
standard_input:
standard_output:
standard_error:
Параметры секции Install
Эти параметры содержат информацию о установке для единицы. Следующие два параметра могут использоваться несколько раз или могут быть указаны списки единиц, разделенные пробелами. Списки включают единицы, ссылающиеся на эту службу из их полей requires
и wants
.
wanted_by:
required_by:
Зависимости
Нет
Пример плейбука
- hosts: app
roles:
- role: systemd-service
systemd_service:
# Имя службы
railsapp:
# Запускать службу при загрузке
enabled: Yes
# Выполнять команду с указанными аргументами при запуске службы
exec_start: "/bin/bash -lc 'puma -C config/puma.rb'"
# Использовать указанную директорию как текущую
working_directory: "/var/www/myapp"
# Запускать процессы от имени этого пользователя и группы
user: "deploy"
group: "deploy"
# Перезапускать службу только в случае, если не получен чистый код выхода или сигнал
restart: "on-failure"
# Попытаться активировать 'redis', если это возможно
wants: "redis.service"
# Активировать 'postgresql' или прекратить работу в случае сбоя
requires: "postgresql.service"
# Единица multi-user.target предпочитает запуск службы
wanted_by: "multi-user.target"
Лицензия
Лицензировано под MIT License.
ansible-galaxy install DevoInc/ansible-role-systemd-service