Diensten beheren met systemctl op je VPS
Op je VPS draaien programma's die er altijd moeten zijn: de SSH-server, een webserver, een database. Zulke programma's heten diensten. Op Debian, Ubuntu, AlmaLinux en Rocky Linux start en bewaakt systemd ze, en je bedient systemd met het commando systemctl. Dit zijn de commando's die je het vaakst nodig hebt.
De status van een dienst
systemctl status nginx
De extensie .service mag je weglaten. Lees de uitvoer van boven naar beneden:
- Het bolletje voor de naam is groen als de dienst draait, wit als hij gestopt is en rood als hij is mislukt.
- Loaded zegt of de dienst bij het opstarten start (
enabled) of niet (disabled). - Active zegt of hij nu draait (
active (running)), gestopt is (inactive (dead)) of mislukt is (failed), en sinds wanneer. - Onderaan staan de laatste regels uit het logboek van de dienst. Vaak staat daar al waarom iets misgaat.
Starten, stoppen en herladen
| Commando | Wat het doet |
|---|---|
sudo systemctl start nginx | Nu starten |
sudo systemctl stop nginx | Nu stoppen |
sudo systemctl restart nginx | Stoppen en weer starten |
sudo systemctl reload nginx | De configuratie opnieuw lezen zonder te stoppen |
Het verschil tussen restart en reload is belangrijk. Bij een restart stopt de dienst even, en zit er een fout in de nieuwe configuratie, dan start hij niet meer en is je website plat. Bij een reload blijft de dienst draaien; nginx houdt bij een fout de oude configuratie aan. Test daarom eerst de configuratie (sudo nginx -t, sudo sshd -t) en gebruik dan reload. Niet elke dienst kent reload; sudo systemctl reload-or-restart kiest zelf.
Bij het opstarten: enable en disable
Starten en "bij het opstarten starten" zijn twee verschillende dingen. Start je een dienst alleen met start, dan is hij na de volgende herstart, bijvoorbeeld door een kernelupdate, weer weg.
| Commando | Wat het doet |
|---|---|
sudo systemctl enable --now nginx | Nu starten en voortaan bij het opstarten. Gebruik dit voor een nieuwe dienst |
sudo systemctl disable --now nginx | Nu stoppen en niet meer bij het opstarten |
systemctl is-enabled nginx | Laat zien of de dienst bij het opstarten start |
Wat is er mis? En wat draait er?
systemctl --failed
Dit toont alle mislukte diensten. De lijst hoort leeg te zijn. Kijk ernaar na elke herstart en elke upgrade. Heb je het probleem opgelost, dan haal je de melding weg met sudo systemctl reset-failed.
systemctl list-units --type=service --state=runninglaat alle draaiende diensten zien. Ken je er een niet, zoek dan uit wat hij doet. Een dienst die je niet nodig hebt, is een onnodige ingang.systemctl list-timerslaat de geplande taken van systemd zien, met wanneer ze het laatst draaiden en wanneer ze weer draaien. Zo zie je bijvoorbeeld of de timers voor automatische updates of het vernieuwen van certificaten lopen.
De logboeken van een dienst
Wil je meer zien dan de paar regels in systemctl status, gebruik dan journalctl:
sudo journalctl -u nginx --since "1 hour ago" sudo journalctl -u nginx -p err -b
Het eerste toont alles van nginx in het afgelopen uur, het tweede alleen de fouten sinds de laatste herstart. Meer commando's staan in Logs lezen met journalctl en docker logs.
Instellingen van een dienst aanpassen
Het unit-bestand van een pakket (in /usr/lib/systemd/system/) pas je nooit aan, want een update overschrijft het. Gebruik sudo systemctl edit nginx: dat maakt een klein bestand met alleen jouw wijzigingen en laat systemd het opnieuw lezen. Wat er uiteindelijk geldt, zie je met systemctl cat nginx.
sudo systemctl reboot, of met Herstarten in het VPS-scherm. Geforceerd uit is de stekker eruit: diensten krijgen geen kans om netjes te stoppen en een database kan beschadigd raken. Zie Het VPS-scherm: aan en uit, grafieken, systeem en logboek.Op AlmaLinux en Rocky Linux werkt systemctl precies hetzelfde, alleen heten sommige diensten anders: de SSH-dienst heet daar sshd in plaats van ssh, Apache heet httpd en de firewall firewalld.
Meer leren? Volg de gratis cursus VPS en Linux-serverbeheer, les 6.1 Diensten beheren met systemd of les 6.2 Logs lezen met journalctl.
