Nosso watchdog reiniciou os serviços que havíamos parado de propósito

Operações

Um de nossos watchdogs inicia qualquer serviço nosso que esteja habilitado, mas não em execução. Duas vezes em outubro, ele iniciou serviços que havíamos parado de propósito. Na segunda vez, visitantes de um de nossos sites receberam erros por cerca de 45 minutos.

Por que esse watchdog existe

Um serviço que sai limpo ao receber SIGTERM, por exemplo porque algo o matou pelo nome, não é considerado "failed" pelo systemd. Restart=on-failure não o traz de volta, e systemctl --failed não o lista. Ele permanece parado até que alguém perceba. Então o watchdog procura serviços que estão habilitados, mas não em execução, e os inicia.

O problema é que um serviço que você parou manualmente parece exatamente igual.

A primeira vez

Em 7 de outubro, paramos um worker de vídeo com systemctl stop às 12:47 para editar sua fila de tarefas. Às 12:55, ele estava rodando novamente: o watchdog o havia iniciado.

A segunda vez

Em 21 de outubro, precisávamos da memória da máquina que também serve dois de nossos sites para um teste de modelo. Um script parou as web apps dos sites, um job de sincronização e um container de banco de dados, novamente com systemctl stop. Cerca de cinco minutos depois, um timer que monitora os sites e, às 19:14, o watchdog, trouxeram o túnel e as web apps de volta.

O túnel voltou a receber tráfego, mas as web apps não conseguiam responder: o modelo em teste ocupava 114 GiB da memória da máquina. De aproximadamente 19:14 às 20:00, alguns visitantes receberam erros 502. Às 20:00, desabilitamos o túnel, as web apps e o job de sincronização, e paramos o timer de monitoramento.

A regra que usamos agora

Mais duas armadilhas do systemd dos mesmos meses

Factory Floor observa serviços habilitados que não estão em execução. Por padrão, ele apenas os reporta e os inicia apenas se você ativar essa opção. Desde a versão 1.0.3, seu alerta também diz como pausar um serviço propositalmente, e seu runbook diz o mesmo.

Atualizado: