systemd_unit
Ansible Systemd-Unit
Описание
Создайте и настройте файлы единиц Systemd как для глобального, так и для «линговых» пользователей.
Общее использование
Просто требуется словарь systemd_units
.
Каждый ключ в systemd_units
представляет собой имя пользователя, root
будет настраивать системные единицы в /etc/systemd/system
.
Под каждым именем пользователя укажите, разрешено ли пользователю находиться в ожидании, по умолчанию - да.
Затем укажите тип единицы: unit
, timer
, mount
и т.д.
Для каждого типа единицы укажите конфигурацию единицы.
Определение единицы
Ключ config
содержит конфигурацию в стиле INI для файла единицы. Ключи чувствительны к регистру в параметрах файла единицы; этот метод позволяет вам определять любой раздел и параметр для файла единицы.
Параметры могут определяться в виде массива, чтобы их можно было вводить более одного раза без перезаписи друг друга.
Эта роль перезапишет существующие файлы единиц!
Параметры единицы
Следующие параметры могут быть установлены для определения единицы:
- enabled: будет включать единицу при загрузке
- state: любое допустимое значение состояния, по умолчанию - запущено
- restart_on_change: будет перезапускать единицу, если мы вносим какие-либо изменения в определение единицы, по умолчанию - да
- backup_before_write: создаст одну резервную копию .bak единицы перед записью нашего определения, по умолчанию - да
- filepath: позволяет вам переопределить путь к файлу единицы по умолчанию. По умолчанию это либо /etc/systemd/system для root, либо ~/.config/systemd/user для пользователей
---
systemd_units:
USERNAME: # Имя пользователя root будет управлять системной единицей в /etc/systemd/system, другие пользователи будут управлять ~/.config/systemd/user
enable_linger: # По умолчанию - да
UNIT_EXTENSION: # service, target, socket и т.д.
UNIT_NAME: # имя файла единицы
config: # Содержит параметры, составляющие файл единицы
SECTION: # Unit, Service, Install и т.д.
OPTION: # Может быть либо OPTION=value, либо OPTION=ARRAY для параметров, которые могут быть указаны несколько раз.
options: # Параметры, которые применимы к единице, но не попадают в файл единицы
enabled: # По умолчанию - да
state: # По умолчанию - запущено, варианты: reloaded;restarted;started;stopped.
restart_on_change: # По умолчанию - да
backup_before_write: # По умолчанию - да
filepath: По умолчанию - либо /etc/systemd/system для root, либо ~/.config/systemd/user для пользователей
Пример: Logrotate
Файл: /usr/lib/systemd/system/logrotate.service
[Unit]
Description=Поворот лог-файлов
Documentation=man:logrotate(8) man:logrotate.conf(5)
ConditionACPower=true
[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/logrotate.conf
# параметры производительности
Nice=19
IOSchedulingClass=best-effort
IOSchedulingPriority=7
# параметры защиты
# подробности: https://www.freedesktop.org/software/systemd/man/systemd.exec.html
# без ProtectHome для логов пользователя
# без PrivateNetwork для доставки почты
# без ProtectKernelTunables для работы SELinux с systemd, версия старше 235
# без MemoryDenyWriteExecute для gzip на i686
PrivateDevices=true
PrivateTmp=true
ProtectControlGroups=true
ProtectKernelModules=true
ProtectSystem=full
RestrictRealtime=true
файл: /usr/lib/systemd/system/logrotate.timer
[Unit]
Description=Ежедневный поворот лог-файлов
Documentation=man:logrotate(8) man:logrotate.conf(5)
[Timer]
OnCalendar=daily
AccuracySec=12h
Persistent=true
[Install]
WantedBy=timers.target
Переменная для настройки: (ПРИМЕЧАНИЕ: Мы не пишем комментарии!)
systemd_units:
root:
service:
logrotate:
config:
Unit:
Description: Поворот лог-файлов
Documentation: 'man:logrotate(8) man:logrotate.conf(5)'
ConditionACPower: 'true'
Service:
Type: oneshot
ExecStart: /usr/sbin/logrotate /etc/logrotate.conf
Nice: 19
IOSchedulingClass: best-effort
IOSchedulingPriority: 7
PrivateDevices: 'true'
PrivateTmp: 'true'
ProtectControlGroups: 'true'
ProtectKernelModules: 'true'
ProtectSystem: full
RestrictRealtime: 'true'
options:
enabled: false
filepath: /usr/lib/systemd/system/logrotate.service
timer:
logrotate:
config:
Unit:
Description: Ежедневный поворот лог-файлов
Documentation: 'man:logrotate(8) man:logrotate.conf(5)'
Timer:
OnCalendar: daily
AccuracySec: 12h
Persistent: 'true'
Install:
WantedBy: timers.target
options:
filepath: /usr/lib/systemd/system/logrotate.timer
Поддержка
Для получения поддержки создайте проблему и предоставьте следующие элементы:
- Пример задачи/плейбука для воспроизведения вашей проблемы
- Созданный результирующий файл.
- Если вы изменяете существующий файл, пожалуйста, предоставьте и необработанную версию.
Generate and configure Systemd Unit files both globally and for lingering users.
ansible-galaxy install notmycloud/ansible-systemd-unit