systemd jest menadżerem systemu i usług dla Linuksa który zastąpił w większości dystrybucji (Arch Linux, CentOS, RedHat, Fedora, Debian, Ubuntu, SUSE) stary SysVinit. Odpowiedzialny jest m.in. za start poszczególnych usług systemowych podczas uruchamiania systemu.
Funkcje systemd
- Możliwość równoległego uruchamiania usług
- Uruchamianie serwisów za pomocą aktywacji gniazda
- Uruchamianie usług na żądanie
- Śledzenie działania procesów przy pomocy grup kontrolnych cgroups
- Wsparcie dla zachowywania i przywracania stanu usług w systemie
- Utrzymanie punktów montowania i automatycznego montowania w systemie
- Transakcyjna implementacja logiki kontroli usług, oparta na zależnościach
- Kompatybilność z SysVinit
Pliki konfiguracyjne:
Cała konfiguracja systemd zapisana jest w plikach zwanych "unitami". Mamy 12 typów plików konfiguracyjnych:
.service, .socket, .device, .mount, .automount, .swap, .target, .path, .timer, .snapshot, .slice, .scope
Dokładny opis znajduje się tutaj: https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files
Unity znajdują się w następujących katalogach:
/etc/systemd/system - pliki z tej lokalizacji są przetwarzane w pierwszej kolejności.
/lib/systemd/system - oryginalne pliki konfiguracyjne które przeważnie są linkowane do /etc/systemd/system
Komendy
Cele uruchomienia
systemctl list-units --type=target - lista wszystkich możliwych trybów (celów) uruchamiania Linuxa
systemctl get-default - pokazuje w jakim trybie (celu) domyślnie uruchamia się Linux
systemctl set-default nazwa_celu - zmiana domyślnego trybu uruchamiania Linuxa
systemctl isolate nazwa_celu - przełączenie trybu/celu w danym momencie
systemd-analyze blame - lista aktualnie uruchomionych usług.
Podstawowe komendy na przykładzie serwera www nginx
systemctl list-units - lista wszystkich aktywnych usług/jednostek które systemd przetwarza.
systemctl list-unit-files – lista wszystkich usług/jednostek wraz ze statusem
systemctl --state=failed - lista usług, których nie udało się uruchomić podczas startu systemu
systemctl start nginx – uruchamianie usługi
systemctl stop nginx – zatrzymywanie usługi
systemctl restart nginx – restart usługi
systemctl reload nginx – przeładowanie konfiguracji danej usługi
systemctl enabled nginx - włączanie usługi
systemctl disable nginx - wyłączanie usługi
systemctl is-enabled nginx - sprawdzanie czy usługa jest włączona
systemctl is-active nginx - sprawdzanie czy usługa jest aktywna/uruchomiona w danym momencie
systemctl status nginx - sprawdzanie statusu usługi
systemctl cat nginx - sprawdzanie definicji/konfiguracji usługi
Analiza
journalctl -b - zdarzenia od czasu ostatniego uruchomienia systemu
journalctl -f - Tak jak komenda tail -f - 10 ostatnich zdarzeń
Ręczne dodawanie usługi
Jeśli chcemy stworzyć i uruchomić przy starcie systemu daną usługę, tworzymy plik jednostki np: /etc/systemd/system/test.service o przykładowej zawartości:
[Unit]
Description=Moj program
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=root
Group=root
ExecStart=/test/test.sh
Następnie włączamy usługę: systemctl enable test