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ą.
Generate and configure Systemd Unit files both globally and for lingering users.
ansible-galaxy install notmycloud.systemd_unit