SYSTEMCTL
System Control voor SystemD systemen
systemD
De Linux gemeenschap staat erom bekend dat er over bepaalde onderwerpen verhitte discussies kunnen ontstaan, en soms zelfs Heilige Oorlogen (Denk maar aan de "distro-wars" van enkele jaren geleden). De overstap van sysVinit naar systemD is een recent voorbeeld van zo’n verhitte discussie (er zijn zelfs distro’s opgericht omdat men het niet eens is met de beslissing van een bepaalde distro om over te stappen naar SystemD, https://devuan.org/Devuan (gebaseerd op Debian GNU/Linux) is zo’n voorbeeld).
Waarom de overstap?
SysVinit (System V init) is gebaseerd 1 op het init systeem van Unix System 5 (bekend als SystemV of sysV), omdat het zo’n oud systeem is vinden bepaalde ontwikkelaars dat het hoog tijd om het te vervangen door een “beter” systeem. Voor zover ik weet is het “probleem” bij sysVinit oa. de opstartvolgorde van daemons e.d. bij oa. het opstarten van het systeem. SysVinit gebruikt een seriële methode, dus het volgende programma of service wordt pas opgestart nadat het vorige volledig is opgestart. Dit kan het opstarten van het systeem vertragen, bijvoorbeeld als er geen Netwerk beschikbaar is blijft het systeem wachten tot de time-out is verlopen en gaat dan pas verder.
SystemD lost dit probleem op door verschillende toepassingen parallel (naast elkaar) te laten opstarten (iets wat bij de oude system V systemen niet mogelijk was door de beperkingen van de hardware in die tijd).
Maar als systemD beter is, waarom zijn er zoveel mensen tegen de overstap?
Er zijn verschillende redenen, zo zeggen bepaalde mensen dat het gewoon een slecht systeem is of dat het tegen het KISS principe van Linux ingaat, 2
SystemD is trouwens niet het enige project ter vervanging van SysVinit, zo heeft Ubuntu een tijdje een eigen systeem gebruikt. Maar ze zijn even later ook overgestapt naar systemD.
SystemD is dus here to stay en kunnen we er dus maar beter aan wennen (tenzij we ons willen beperken tot de distro’s die zweren bij sysVinit).
Daarom vandaag een korte introductie tot systemD.
Als je al langer werkt met Linux en sysVinit ben je zeker gewoon om een service op de volgende manier op te starten :# service NAAM start
Bij systemD gebruiken we systemcontrol. # systemctl start NAAM
- stop
- start
- restart
- reload
- status
- enable
- disable
- show
Let op, als je enable gebruikt zal de service pas opstarten na een reboot/herstart. Als je de service onmiddellijk wil gebruiken moet je start gebruiken.
Je ziet dat het niet zo moeilijk is, maar de volgorde van het commando en de naam kan vooral in het begin voor verwarring zorgen.
- # systemctl list-dependencies (laat zien welke services van welke andere service afhankelijk zijn).
- # systemctl list-dependencies (laat zien welke services van welke andere service afhankelijk zijn).
- # systemctl list-unit-files (laat unit bestanden en hun status zien).
- # systemctl get-default (Laat de standaard “Target” zien, dit is wat we vroeger het Runlevel noemde. Dit is meestal graphical.target als je met X werkt en multi-user.target als je zonder X (bijv. een server) werkt)
- # systemctl set-default TARGET (zoals de naam doet vermoeden stel je hiermee in welk target (runlevel) er bij het opstarten wordt gebruikt.
- # systemctl isolate TARGET (hiermee schakel je tussen verschillende runlevels) bijv. # systemctl isolate graphical.target start de X server als je in multi-user hebt opgestart. (dit is vergelijkbaar met telinitt bij sysVinit).
Om tussen verschillende statussen van het systeem te schakelen zijn er deze commando’s:
- # systemctl reboot
- # systemctl poweroff
- # systemctl emergency
- # systemctl default (terug naar de standaard status)
Buiten systemcontrol is er ook nog journalcontrol # (journalctl).
- # journalctl (laat alle opgeslagen logboeken zien)
- # journalctl -u network.service (Laat netwerk service gerelateerde meldingen zien).
- # journalctl -f (volg (follow) berichten als ze gegenereerd worden).
- # journalctl -k (laat enkel Kernel berichten zien).
Zoals altijd zijn er veel te veel mogelijkheden om hier op te noemen, voor een volledige lijst van opties kun je altijd het -h (of –help) prameter meegeven met een commando (# systemctl -h) of in de verschillende manpages : "man systemd" "man systemctl" of "man jounalctl").