Watchdog-ul nostru a repornit serviciile pe care le oprise­sem intenționat

Operațiuni

Unul dintre watchdog-urile noastre pornește orice serviciu al nostru care este activat, dar nu rulează. De două ori în octombrie a pornit servicii pe care le oprise­sem intenționat. A doua oară, vizitatorii unuia dintre site-urile noastre au întâmpinat erori timp de aproximativ 45 de minute.

De ce există acel watchdog

Un serviciu care se termină curat când primește SIGTERM, de exemplu pentru că ceva l-a oprit pe nume, nu este considerat „eșuat” de systemd. Restart=on-failure nu îl repornește, iar systemctl --failed nu îl listează. Rămâne oprit până când cineva observă din întâmplare. Așadar, watchdog-ul caută servicii care sunt activate, dar nu rulează, și le pornește.

Problema este că un serviciu pe care l-ați oprit manual arată exact la fel.

Prima dată

Pe 7 octombrie am oprit un worker video cu systemctl stop la 12:47 pentru a edita coada sa de joburi. La 12:55 rula din nou: watchdog-ul îl pornise.

A doua oară

Pe 21 octombrie aveam nevoie de memoria mașinii care servește și două dintre site-urile noastre pentru un test de model. Un script a oprit aplicațiile web ale site-urilor, un job de sincronizare și un container de bază de date, din nou cu systemctl stop. Aproximativ cinci minute mai târziu, un timer care monitorizează site-urile, iar la 19:14 watchdog-ul, au repornit tunelul și aplicațiile web.

Tunelul a preluat din nou traficul, dar aplicațiile web nu puteau răspunde: modelul testat ocupa 114 GiB din memoria mașinii. De la aproximativ 19:14 până la 20:00, unii vizitatori au primit erori 502. La 20:00 am dezactivat tunelul, aplicațiile web și jobul de sincronizare, și am oprit timerul de monitorizare.

Regula pe care o folosim acum

Încă două capcane systemd din aceleași luni

Factory Floor monitorizează serviciile activate care nu rulează. În mod implicit, le raportează doar și le pornește doar dacă activați această opțiune. Începând cu versiunea 1.0.3, alerta sa indică și cum să puneți un serviciu în pauză intenționat, iar runbook-ul spune același lucru.

Actualizat: