systemd
systemctl start devuelve error y remite a systemctl status y journalctl. El mensaje en sí no contiene la causa: solo dice que el proceso terminó mal.
El motivo real está siempre en el journal de esa unidad. Es el primer comando, no el último.
En el orden en que lo miramos nosotros. No es un ranking de frecuencia: no publicamos estadísticas que no hemos medido.
El programa falla al arrancar por su propia configuración. El journal lo muestra literalmente.
Comprobar
sudo journalctl -u mi-servicio -n 50 --no-pagerCorregir
# Corregir lo que indique el journal y reintentar:
sudo systemctl start mi-servicioExecStart no es una ruta absoluta o el binario no existe. systemd no resuelve el PATH.
Comprobar
systemctl cat mi-servicio | grep ExecStart
ls -l /ruta/al/binarioCorregir
# Poner la ruta absoluta en ExecStart y recargar:
sudo systemctl daemon-reloadEl usuario del servicio no puede leer el directorio de trabajo o escribir donde necesita.
Comprobar
systemctl cat mi-servicio | grep -E 'User|WorkingDirectory'
sudo -u el_usuario ls /ruta/de/trabajoCorregir
sudo chown -R el_usuario:el_grupo /ruta/de/trabajoEl endurecimiento de la unidad bloquea algo que el servicio necesita. ProtectSystem=strict deja el sistema en solo lectura salvo lo declarado.
Comprobar
systemd-analyze security mi-servicioCorregir
# Declarar los directorios donde tiene que escribir en vez de quitar la
# protección:
# ReadWritePaths=/var/lib/mi-servicioEl Type no corresponde con lo que hace el proceso. Con Type=forking systemd espera que se bifurque; si no lo hace, da el arranque por fallido.
Comprobar
systemctl cat mi-servicio | grep TypeCorregir
# La mayoría de los servicios modernos no se demonizan: Type=simple.
sudo systemctl daemon-reload && sudo systemctl start mi-servicioTras editar cualquier fichero de unidad hace falta systemctl daemon-reload. Sin él systemd sigue usando la versión que tenía cargada, y el cambio parece no surtir efecto.
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.
Soporte Linux y DevOps en español