Betaalmethoden Abuse

Een Linux service automatisch herstarten

26.02.2021, 20:42

Vaak valt de service spontaan uit. De gebruiker moet zich bezighouden met handmatig herstel. Dit is op zich geen probleem als het op een thuiscomputer gebeurt. Sterker nog - het is goed, omdat er een echte kans is om de staat van de service te bepalen, fouten te identificeren en ze te elimineren. Maar de situatie is heel anders als het gaat om servers en VPS-services, die constant moeten werken om toegang te bieden tot een website of applicatie. In dit artikel bekijken we hoe je het automatisch herstarten van Linux services op verschillende manieren kunt configureren: met een monitoring script dat periodiek wordt uitgevoerd via cron en in systemd.

Automatisch herstarten in systemd

De standaardinstelling is dat Systemd niets doet met de service als deze crasht. Maar de gebruiker kan altijd de instellingen zo configureren dat in het geval van een service crash of stop de service automatisch opnieuw wordt gestart. Hiervoor wordt de richtlijn Restart gebruikt, die moet worden toegevoegd aan de sectie Service. Laten we nu eens kijken naar een voorbeeld van het configureren van het automatisch herstarten van de Apache service:

$ sudo systemctl edit apache2

[Service]

Restart=on-failure

RestartSec=5s

настройка автоматического перезапуска сервиса Apache:

Hier geeft RestartSec aan hoe lang er gewacht moet worden voordat de service opnieuw wordt gestart. Als u klaar bent, slaat u de wijzigingen op en voert u het commando daemon-reload uit om de configuratie opnieuw in te lezen:

$ sudo systemctl daemon-reload

Kijk vervolgens naar de status van het proces om te controleren of alles goed werkt, beëindig het proces met een kill-signaal:

 $ sudo systemctl status apache2

$ kill -KILL 32091

Процесс сигналом kill

Controleer de status opnieuw, het proces zou moeten draaien. Om de initialisatie zo in te stellen dat deze elke keer wordt uitgevoerd, gebruik je de speciale richtlijn Restart: always. Maar je moet heel voorzichtig zijn met het gebruik hiervan, want het zal je niet toestaan om het proces te beëindigen, zelfs als dat nodig is. Als het proces constant crasht, zodat het opnieuw wordt gestart, kun je een limiet op het aantal herstarts toevoegen aan de Service sectie:

$ sudo systemctl edit apache2

[Service]

StartLimitIntervalSec=500

StartLimitBurst=5

Restart=on-failure

RestartSec=5s

Лимит на количество перезапусков в секцию Service

Hier geven StartLimitBurst en StartLimitIntervalSec aan hoe belangrijk het is om de service vijf keer opnieuw te starten, en als het al die vijf keer crasht, om het met rust te laten en het niet aan te raken. De tweede richtlijn beperkt het herstarten van de service tot 500 seconden.

Automatisch herstarten door script

Dit is waarschijnlijk de meest betrouwbare en faalveilige methode die werkt in alle versies van Linux. In Apache is het eenvoudig om een automatische herstart te maken met behulp van een script. Om dit te doen, moet je het commando invoeren:

$  sudo vi /usr/local/bin/apache-monitor.sh

#!/bin/bash

ps -A | grep apache2 || systemctl start apache2

Sla het bestand op en zorg ervoor dat het uitvoerbaar is:

chmod ugo+x /usr/local/bin/apache-monitor.sh

Vergeet niet een cron entry toe te voegen om het script periodiek uit te voeren:

$ sudo crontab -e

*/5 * * * * /usr/local/bin/apache-monitor.sh

Dat is het. Ja, het instellen van een automatische herstart van de service is niet zo eenvoudig als het op het eerste gezicht lijkt. Maar het is een belangrijke mogelijkheid, dus je moet er aandacht aan besteden - het is het zeker waard.