notmycloud.systemd_unit

Ansible Systemd-Unit

Opis

Generuj i konfiguruj pliki jednostek Systemd zarówno globalnie, jak i dla użytkowników z włączoną opcją "linger".

Ogólne użycie

Wystarczy użyć słownika systemd_units. Każdy klucz w systemd_units reprezentuje nazwę użytkownika, a root skonfiguruje jednostki systemowe w /etc/systemd/system. Pod każdym użytkownikiem określ, czy użytkownik ma być dozwolony do linger, domyślnie ustawione na tak. Następnie dodaj typ jednostki: unit, timer, mount itp. Dla każdego typu jednostki należy uwzględnić konfigurację jednostki.

Definicja jednostki

Klucz config zawiera konfigurację w stylu INI dla pliku jednostki. Klucze są czułe na wielkość liter w opcjach pliku jednostki, dzięki czemu można zdefiniować dowolny dział i opcję w pliku jednostki. Opcje mogą być zdefiniowane jako tablica, co pozwala na wprowadzenie ich wielokrotnie, nie nadpisując się nawzajem.

Ten moduł nadpisze istniejące pliki jednostek!

Opcje jednostki

Następujące opcje mogą być ustawione dla definicji jednostki:

  • enabled: ustawi jednostkę jako włączoną przy uruchomieniu
  • state: dowolna ważna wartość stanu, domyślnie ustawione na started
  • restart_on_change: zrestartuje jednostkę, jeśli wprowadzimy jakiekolwiek zmiany w definicji jednostki, domyślnie ustawione na tak
  • backup_before_write: utworzy pojedynczy plik .bak jednostki przed zapisaniem naszej definicji, domyślnie ustawione na tak
  • filepath: pozwala nadpisać domyślną ścieżkę pliku jednostki. Domyślnie to /etc/systemd/system dla root lub ~/.config/systemd/user dla użytkowników
---
systemd_units:
  NAZWA_UŻYTKOWNIKA: # Nazwa użytkownika root zajmie się jednostkami systemowymi w /etc/systemd/system, inni użytkownicy w ~/.config/systemd/user
    enable_linger: # Domyślnie ustawione na tak
    RODZAJ_JEDNOSTKI: # service, target, socket itp.
      NAZWA_JEDNOSTKI: # nazwa pliku jednostki
        config: # Zawiera opcje, które tworzą plik jednostki
          SEKCEJA:  # Unit, Service, Install itp.
            OPCJA: # Może być albo OPCJA=wartość lub OPCJA=TABLICA dla opcji, które mogą wystąpić wielokrotnie.
        options: # Opcje, które mają zastosowanie do jednostki, ale nie są w pliku jednostki
          enabled: # Domyślnie ustawione na tak
          state: # Domyślnie ustawione na started, opcje: reloaded;restarted;started;stopped.
          restart_on_change: # Domyślnie ustawione na tak
          backup_before_write: # Domyślnie ustawione na tak
          filepath: Domyślnie to /etc/systemd/system dla root lub ~/.config/systemd/user dla użytkowników

Przykład: Logrotate

Plik: /usr/lib/systemd/system/logrotate.service

[Unit]
Description=Rotacja plików dziennika
Documentation=man:logrotate(8) man:logrotate.conf(5)
ConditionACPower=true

[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/logrotate.conf

# opcje wydajności
Nice=19
IOSchedulingClass=best-effort
IOSchedulingPriority=7

# opcje z zabezpieczeniami
#  szczegóły: https://www.freedesktop.org/software/systemd/man/systemd.exec.html
#  brak ProtectHome dla logów katalogu użytkownika
#  brak PrivateNetwork dla dostarczania poczty
#  brak ProtectKernelTunables dla pracy SELinux z systemd starszym niż 235
#  brak MemoryDenyWriteExecute dla gzip na i686
PrivateDevices=true
PrivateTmp=true
ProtectControlGroups=true
ProtectKernelModules=true
ProtectSystem=full
RestrictRealtime=true

plik: /usr/lib/systemd/system/logrotate.timer

[Unit]
Description=Codzienna rotacja plików dziennika
Documentation=man:logrotate(8) man:logrotate.conf(5)

[Timer]
OnCalendar=daily
AccuracySec=12h
Persistent=true

[Install]
WantedBy=timers.target

Zmienna do skonfigurowania: (UWAGA: Nie zapisujemy wierszy z komentarzami!)

systemd_units:
  root:
    service:
      logrotate:
        config:
          Unit:
            Description: Rotacja plików dziennika
            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: Codzienna rotacja plików dziennika
            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

Wsparcie

Aby uzyskać wsparcie, proszę zgłosić problem i podać następujące elementy:

  • Przykładowe zadanie/playbook do odtworzenia twojego problemu
  • Utworzony plik wynikowy.
  • Jeśli modyfikujesz istniejący plik, proszę również dostarczyć wersję niemodyfikowaną.
O projekcie

Generate and configure Systemd Unit files both globally and for lingering users.

Zainstaluj
ansible-galaxy install notmycloud.systemd_unit
Licencja
mit
Pobrania
338
Właściciel