Vår bevakningsprocess startade om de tjänster vi hade stoppat med avsikt

Drift

En av våra bevakningsprocesser startar alla våra tjänster som är aktiverade men inte körda. Två gånger i oktober startade den tjänster vi hade stoppat med avsikt. Andra gången fick besökare på en av våra webbplatser felmeddelanden i cirka 45 minuter.

Varför den bevakningsprocessen finns

En tjänst som avslutas korrekt när den får SIGTERM, till exempel för att något dödade den vid namn, är inte "failed" enligt systemd. Restart=on-failure startar inte om den, och systemctl --failed listar inte den. Den förblir nere tills någon råkar märka det. Så bevakningsprocessen letar efter tjänster som är aktiverade men inte körda, och startar dem.

Problemet är att en tjänst du stoppade manuellt ser exakt likadan ut.

Första gången

Den 7 oktober stoppade vi en videobearbetare med systemctl stop klockan 12:47 för att redigera dess jobbkö. Klockan 12:55 kördes den igen: bevakningsprocessen hade startat den.

Andra gången

Den 21 oktober behövde vi minnet på den maskin som också servar två av våra webbplatser för ett modelltest. Ett skript stoppade webbplatsernas webbappar, ett synkroniseringsjobb och en databascontainer, återigen med systemctl stop. Cirka fem minuter senare startade en timer som övervakar webbplatserna, och klockan 19:14 bevakningsprocessen, tillbaka tunneln och webbapparna.

Tunneln tog emot trafik igen, men webbapparna kunde inte svara: modellen under test höll 114 GiB av maskinens minne. Från cirka 19:14 till 20:00 fick vissa besökare 502-fel. Klockan 20:00 inaktiverade vi tunneln, webbapparna och synkroniseringsjobbet, och stoppade övervakningstimern.

Regeln vi använder nu

Två fler systemd-fällor från samma månader

Factory Floor bevakar aktiverade tjänster som inte körs. Som standard rapporterar den dem bara, och startar dem bara om du slår på det. Sedan version 1.0.3 säger dess varning också hur du pausar en tjänst avsiktligt, och dess runbook säger samma sak.

Uppdaterad: