systemd

Job for X.service failed because a timeout was exceeded

El servicio se queda en «activating» hasta que systemd lo mata. El proceso arranca pero nunca dice que está listo, o tarda más de lo permitido. En el journal la línea correspondiente es «X.service: start operation timed out. Terminating.».

Qué comprobar, y en qué orden

En el orden en que lo miramos nosotros. No es un ranking de frecuencia: no publicamos estadísticas que no hemos medido.

  1. 1

    El Type no corresponde. Con Type=notify systemd espera una señal por sd_notify que el programa nunca envía.

    Comprobar

    systemctl cat mi-servicio | grep -E 'Type|TimeoutStartSec'

    Corregir

    # Si el programa no implementa sd_notify, Type=simple o Type=exec.
  2. 2

    El arranque es legítimamente largo: migraciones de base de datos, índices, precarga.

    Comprobar

    sudo journalctl -u mi-servicio -f

    Corregir

    # En la unidad:
    #   TimeoutStartSec=300
    sudo systemctl daemon-reload
  3. 3

    El proceso está esperando algo que no llega: una base de datos, un montaje de red, DNS.

    Comprobar

    sudo journalctl -u mi-servicio -n 30 --no-pager

    Corregir

    # Declarar la dependencia real en la unidad:
    #   After=postgresql.service
    #   Requires=postgresql.service
  4. 4

    El proceso pide una contraseña o una frase de paso por la entrada estándar, que en systemd no existe.

    Comprobar

    sudo journalctl -u mi-servicio | grep -i 'passphrase\|password\|enter'

    Corregir

    # Quitar la frase de paso de la clave o suministrarla con un fichero de
    # credenciales; un servicio no puede depender de que alguien escriba.

Los comandos de esta página se ejecutan en tu servidor y algunos modifican la configuración: léelos antes de pegarlos. Las rutas y los nombres de servicio varían entre distribuciones. Así se elabora este catálogo.