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

sysVinit voorbeeld # service network-manager start

Bij systemD gebruiken we systemcontrol. # systemctl start NAAM

SystemD voorbeeld # systemctl start network-manager
de verschillende mogelijke commando’s zijn:
  • 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.

Andere handige systemd commando’s zijn:
  • # 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).

Enkele voorbeelden van journalcontrol:
  • # 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").

1 Hoewel men vaak zegt dat Linux (of enkele van zijn onderdelen) "gebaseerd" is op UNIX® bedoeld men eigenlijk dat het gebaseerd is op hoe UNIX© of een onderdeel werkt. Linux en zijn onderdelen zijn in geen geval gebaseerd op code van UNIX© Er zijn mensen en bedrijven die dit beweren om Linux zo af te schilderen als zijnde plagiaat of piraterij, maar hier is nooit enig bewijs voor geleverd.
2 KISS betekend hier Keep It Simple Stupid en niet de naam van een-of-andere GlamRock band met dezelfde naam.