Tutoriel Linux

Na een mislukte service, wat doet systemctl reset-failed echt?

Débutant3 min de lecture

systemctl reset-failed zet de status van een mislukt eenheid en de herstart teller terug naar nul. De opdracht bereidt een nieuwe controle voor, maar repareert de service niet.

Wanneer een systemd eenheid naar de status failed gaat, is de verleiding groot om onmiddellijk systemctl reset-failed uit te voeren. Op een VM, een werkstation of een server kan deze opdracht de zichtbare status verwijderen zonder de oorzaak van de stopzetting aan te raken.

De diagnose begint met de status van de service en zijn logboek. Je kunt dan de specifieke eenheid opnieuw instellen, het resultaat controleren en vervolgens proberen een aparte start uit te voeren als de fout begrijpelijk is.

Status van een Linux-service in failure vóór de systemd-reset
De reset verwijdert de foutstatus, het corrigeert de oorzaak in het logboek niet.

Lees de service voordat je zijn status reset

Een eenheid die gemarkeerd is als failed duidt de status aan die door systemd wordt gevolgd. Het biedt op zichzelf echter niet de reden voor de crash. Begin met de status en het logboek van de daadwerkelijk betrokken eenheid:

systemctl status mijn-service.service
journalctl -u mijn-service.service

De link journalctl maakt het mogelijk om de boodschap van de service in het logboek terug te vinden. Lees deze voordat je de status failed verwijdert, vooral als de eenheid in een lus opnieuw opstart.

Om de huidige status, de substatus, het uitvoeringsresultaat en de herstart teller te scheiden, vraag ook de eigenschappen van de eenheid op:

systemctl show mijn-service.service -p ActiveState -p SubState -p Result -p NRestarts

Deze vier waarden beantwoorden verschillende vragen:

  • ActiveState geeft de algemene status aan die door systemd wordt gevolgd.
  • SubState specificeert de substatus van de eenheid.
  • Result geeft het resultaat aan van de uitvoering die tot de mislukking leidde.
  • NRestarts geeft het aantal geregistreerde herstarts aan.

De opdracht reset-failed verwijdert de status, niet de fout

Na het lezen, richt je je alleen op de betrokken eenheid:

sudo systemctl reset-failed mijn-service.service

systemctl reset-failed <eentheid> reset de failed status van de eenheid en de herstart teller die aan de startlimiet is gekoppeld. De opdracht herstart de eenheid niet.

Het wijzigt noch ExecStart, noch de rechten, noch de afhankelijkheden, noch de binaire die door de eenheid wordt gebruikt. Het verwijdert ook het logboek niet. De man-pagina van systemctl beschrijft dit gedrag en de andere beschikbare subopdrachten.

De verdwijning van failed kan dus een valse indruk van reparatie geven. De service kan nog steeds een ongeldige configuratie, een ontbrekende afhankelijkheid of een ExecStart opdracht die faalt bevatten.

Controleer het resultaat voordat je een nieuwe opstart uitvoert

Herlees de eigenschappen na de reset. De controle richt zich op de status van de eenheid en de teller, niet op een uitvoer van de opdracht om te kopiëren:

systemctl show mijn-service.service -p ActiveState -p SubState -p Result -p NRestarts

Als de oorzaak is begrepen en gecorrigeerd, wordt de opstart een aparte actie:

sudo systemctl start mijn-service.service
systemctl status mijn-service.service
journalctl -u mijn-service.service

De status en het logboek maken het mogelijk om de status te constateren die is verkregen na deze opstart. Als de eenheid onmiddellijk opnieuw mislukt, stop dan met de pogingen en corrigeer de oorzaak die in Result of in het logboek is aangetroffen.

Herlaad de eenheidsbestanden met sudo systemctl daemon-reload na het wijzigen van een eenheidsbestand. Deze stap volgt niet automatisch op reset-failed. De map die gewijd is aan systemd herlaadbeurten behandelt dit geval apart.

Voor een service die door een timer is gestart, legt de werking van systemd-timers de relatie uit tussen de service-eenheid en zijn trigger. De teruggezette status corrigeert noch het programma, noch de configuratie, noch de afhankelijkheid die de mislukking veroorzaakt.