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
Лицензия
mit
Загрузки
322
Владелец