← Las 34 trampasTrampa P-083 · severidad alta

systemd dice «active» y el contenedor lleva minutos muerto

Qué pasa

Muchos servicios de modelos son un script que hace docker run -d y termina. Para que systemd no los dé por acabados se usa Type=oneshot con RemainAfterExit=yes. El efecto secundario: systemd no vigila el contenedor, solo que el script salió bien.

systemctl --user is-active mi-modelo.service   ->  active
docker ps -a | grep mi-modelo                   ->  Exited (1)

Y lo peor: al volver a arrancar el servicio, systemd cree que ya está en marcha y no hace nada.

Cómo evitarlo

  • Para relanzar: systemctl stop, borra el contenedor (docker rm -f) y systemctl start.
  • Mejor aún: que el script espere en primer plano al contenedor (docker run sin -d, o docker wait) y usa Restart=on-failure. Así systemd sí se entera.