Systemctl onder de knie krijgen: het beheercommando van systemd
1. Bekijk de status van een service
systemctl status nginx
Dit toont of de service actief (`active (running)`), inactief (`inactive`), gefailed of `masked` is. Daaronder ziet u de laatste logregels van de service — een snelle eerste indruk zonder dat u `journalctl` hoeft te openen.
2. Start een service direct
sudo systemctl start nginx
Dit start de service nu, maar niet bij de volgende systeemstart. Voor een webserver die na een reboot moet draaien, hebt u stap 3 nodig.
3. Schakel een service in bij het opstarten
sudo systemctl enable nginx
Dit maakt een symbolische link van het unit-bestand naar de `multi-user.target` — het systeem start de service voortaan automatisch.
4. Start en schakel in één keer in
sudo systemctl enable --now nginx
De optie `--now` combineert stap 2 en 3. Voor een nieuwe service is dit vrijwel altijd wat u wilt: draaien nu én na een reboot.
5. Stop een service
sudo systemctl stop nginx
Dit stopt de service onmiddellijk. Gebruik `disable` om ook de automatische start bij boot uit te schakelen.
6. Herstart een service
sudo systemctl restart nginx
Dit stopt en start de service opnieuw. Handig na een configuratiewijziging, maar het verbreekt actieve verbindingen. Voor nginx en andere services die configuratie herladen zonder te stoppen, is `reload` de betere keuze:
sudo systemctl reload nginx
`reload` stuurt het signaal dat de service zelf heeft gedefinieerd om configuratie opnieuw te lezen — zonder downtime.
Mask: een service onmogelijk maken
Soms moet een service niet alleen gestopt zijn, maar ook niet gestart kunnen worden — niet door u, niet door een andere service die ervan afhankelijk is.sudo systemctl mask nginx
Dit linkt het unit-bestand naar `/dev/null`. Elke poging om de service te starten faalt, ook indirect via dependencies. Met `unmask` maakt u dit ongedaan:
sudo systemctl unmask nginx
Dit is strenger dan `disable`: een disabled service kan nog steeds gestart worden door een andere service die hem nodig heeft. Een masked service kan dat niet.
Services van gebruikers beheren
Niet alles hoeft als root. Met de `--user`-flag beheert u services die draaien onder uw eigen gebruikersaccount:systemctl --user status mijn-service
systemctl --user enable --now mijn-serviceDit werkt voor achtergrondprocessen zoals een persoonlijke backup-timer of een development-server. De services staan in `~/.config/systemd/user/`. U hebt hier geen sudo voor nodig.
Targets: het moderne runlevel
Een target in systemd vervangt het runlevel van het oude SysV init. Waar u vroeger `telinit 3` draaide om naar multi-user mode te gaan, gebruikt u nu:sudo systemctl isolate multi-user.target
Dit schakelt alle services uit die niet in deze target zitten. `multi-user.target` is de tekstmodus zonder GUI; `graphical.target` is het equivalent met desktopomgeving. De oude commando's zoals `telinit` werken nog, maar sturen intern gewoon systemd-commando's aan.
De structuur van systemctl
De basisvorm is voorspelbaar:systemctl [opties] [commando] [unit]
De meest gebruikte opties:
- `--now`: start of stop direct bij enable of disable
- `--no-block`: wacht niet op voltooiing van de actie
- `--force`: dwing de actie af, ook als de service niet reageert
Verificatie
Controleer of alles werkt:systemctl status nginx
systemctl is-enabled nginx
systemctl is-active nginx`is-enabled` toont of de service bij boot start; `is-active` of hij nu draait. Allebei zouden `enabled` en `active` moeten tonen.
Veelgestelde problemen
1. Service start niet na een configuratiewijzigingsudo systemctl daemon-reload
Systemd cached unit-bestanden. Na het bewerken van een unit-bestand in `/etc/systemd/system/` moet u de daemon opnieuw laten laden, anders gebruikt hij de oude configuratie.
2. Service blijft falen — geen duidelijke foutmelding
sudo journalctl -u nginx -n 50
`systemctl status` toont alleen de laatste paar logregels. `journalctl` geeft de volledige output van de service, vaak met de eigenlijke fout die anders verborgen blijft.
3. Een service is gemaskt en u weet niet waarom
systemctl list-unit-files | grep masked
Dit toont alle gemaskte units. Een `masked` service kan niet gestart worden, ook niet door dependencies. Dit is soms nodig, maar kan verwarrend zijn als een afhankelijke service niet start.
Wat systemctl je kost
Systemd is niet het meest minimalistische init-systeem dat er is. Kritiek op de complexiteit is terecht: waar SysV init draaide op eenvoudige shellscripts, werkt systemd met een eigen configuratieformaat, een eigen logging-daemon en een eigen service-manager. Wie alleen `service nginx start` wilde typen, moet nu het verschil kennen tussen `start`, `enable` en `mask`.Die complexiteit koopt wel iets: parallel opstarten, betere dependency-tracking en één uniforme interface voor services, timers, mounts en power management. De oude commando's `service` en `chkconfig` werken nog op de meeste distributies, maar sturen intern gewoon systemd aan.
En wie systemd niet wil, heeft een probleem: alternatieven zoals OpenRC of runit bestaan, maar de grote distributies zijn overgestapt. Zelfs als je een alternatief init-systeem draait, moet je software vaak configureren die rekening houdt met systemd-componenten. De keuze is in de praktijk gemaakt.
`systemctl` is daarmee geen optie meer, maar de standaard — en wie Linux beheert, kan er niet omheen.