Tutoriel Linux

Zjistit, proč je služba systemd neúspěšná

Débutant3 min de lecture

Servis, který přejde do selhal, nepotřebuje okamžité restartování. Na serveru tento zvyk někdy vymaže zprávu, která vysvětluje poruchu, nebo restartuje program s stále neplatnou konfigurací.

Začněte identifikací postižené jednotky, přečtěte si její stav a její protokol, poté opravte příčinu. Restartování přijde později.

Tux kontroluje chybovou kontrolku na serveru Linux
Porucha služby se diagnostikuje podle jejího stavu a protokolu před jejím restartováním.

Seznam skutečně selhaných jednotek

Tento příkaz zobrazuje služby a jednotky, které systemd považuje za chybné:

systemctl --failed

Poznamenejte si plný název, například nginx.service nebo moje-aplikace.service. Jednotka exited nemusí být nutně porouchaná: některé služby vykonávají krátkou úlohu a pak se normálně zastaví. Stav failed označuje, že spuštění, kontrolní příkaz nebo sledovaný proces skončil chybou.

Pro kontrolu aktivních, zastavených a jejich stavů služeb také zkontrolujte seznam služeb pomocí systemctl.

Přečtěte si stav služby před jakýmikoliv restartováními

Nahraďte nginx vaší jednotkou. Možnost --no-pager tiskne výstup přímo do terminálu, což zabraňuje zůstat v less během SSH relace.

sudo systemctl status nginx --no-pager

Věnujte zvláštní pozornost řádku Active:, návratovému kódu a posledním zobrazeným řádkům. Zde se často objevují již obsazený port, chybějící cesta, nečitelný certifikát nebo špatně napsaná direktiva. Pokud služba spouští binární soubor, který má vlastní validátor, nejprve spusťte tento validátor. Například pro Nginx:

sudo nginx -t

Nepoužívejte tento příkaz na stroji, který nepoužívá Nginx. Každá služba má svou vlastní syntax pro kontrolu.

Návrat k chybovému hlášení pomocí journalctl

systemctl status ukazuje pouze výňatek. Protokol jednotky poskytuje úplný kontext:

sudo journalctl -u nginx -b --no-pager
sudo journalctl -u nginx -n 50 --no-pager

-b omezuje vyhledávání na aktuální spuštění. -n 50 uchovává posledních 50 řádků, pokud je porucha starší. Pro sledování restartování v reálném čase, použijte sudo journalctl -fu nginx ve druhé SSH relaci. Příručka journalctl a zprávy z posledního spuštění pomáhá rozšířit diagnostiku, když chyba postihuje více služeb.

Opravit, restartovat a poté zkontrolovat

Po úpravě souboru jednotky nebo drop-in systemd znovu načtěte konfiguraci. Tato etapa nezrestartuje službu.

sudo systemctl daemon-reload
sudo systemctl restart nginx
systemctl is-active nginx
systemctl --failed

is-active by mělo odpovědět active. Pokud služba naslouchá na portu, také zkontrolujte port a proveďte test ze správného klienta. Odpověď active nezaručuje, že webová aplikace, proxy nebo databáze již přijímají požadavky.

Na kritické službě si před restartováním udržujte otevřenou druhou SSH relaci a zkopírujte přesnou chybu do svého ticketu nebo poznámek. Vyhnete se tak opakování stejné diagnostiky při příštím incidentu.

sudo apt update && sudo apt upgrade