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