Nuestro watchdog reinició los servicios que habíamos detenido a propósito

Operaciones

Uno de nuestros watchdogs arranca cualquiera de nuestros servicios que esté habilitado pero no en ejecución. Dos veces en octubre arrancó servicios que habíamos detenido a propósito. La segunda vez, los visitantes de uno de nuestros sitios recibieron errores durante unos 45 minutos.

Por qué existe ese watchdog

Un servicio que sale limpiamente al recibir SIGTERM, por ejemplo porque algo lo mató por nombre, no está «fallido» para systemd. Restart=on-failure no lo recupera, y systemctl --failed no lo lista. Permanece caído hasta que alguien se da cuenta por casualidad. Así que el watchdog busca servicios habilitados pero no en ejecución, y los arranca.

El problema es que un servicio que detuviste manualmente se ve exactamente igual.

La primera vez

El 7 de octubre detuvimos un worker de vídeo con systemctl stop a las 12:47 para editar su cola de trabajos. A las 12:55 estaba ejecutándose de nuevo: el watchdog lo había arrancado.

La segunda vez

El 21 de octubre necesitábamos la memoria de la máquina que también sirve dos de nuestros sitios para una prueba de modelo. Un script detuvo las aplicaciones web de los sitios, un trabajo de sincronización y un contenedor de base de datos, de nuevo con systemctl stop. Unos cinco minutos después, un timer que vigila los sitios, y a las 19:14 el watchdog, volvieron a levantar el túnel y las aplicaciones web.

El túnel volvió a recibir tráfico, pero las aplicaciones web no podían responder: el modelo bajo prueba ocupaba 114 GiB de la memoria de la máquina. Desde las 19:14 hasta las 20:00, algunos visitantes recibieron errores 502. A las 20:00 deshabilitamos el túnel, las aplicaciones web y el trabajo de sincronización, y detuvimos el timer de vigilancia.

La regla que usamos ahora

Dos trampas más de systemd de los mismos meses

Factory Floor vigila los servicios habilitados que no se están ejecutando. Por defecto solo los informa, y solo los inicia si activas esa opción. Desde la versión 1.0.3, su alerta también indica cómo pausar un servicio a propósito, y su runbook dice lo mismo.

Actualizado: