Ejecuto un servicio personalizado con un script de inicio clásico en Debian Jessie. Debian Jessie usa systemd. La razón por la que uso un script de inicio es que también uso el mismo servicio en Debian Wheezy, que no tiene systemd.
Dado que el servicio puede fallar ocasionalmente, quiero que se reinicie cuando se detenga. Tengo entendido que systemd se encargará de esto. Sin embargo, cuando elimino manualmente el servicio (sin systemctl stop service
), systemctl status
informaré que el servicio es active (exited)
.
Tengo entendido que esto significa que systemd simplemente considera que el servicio puede "ejecutarse" sin tener un proceso.La documentación menciona RemainAfterExit
como una forma de configurar este comportamiento., pero esta es una bandera para usar en un archivo de unidad, solo tengo un script de inicio.
¿Hay alguna manera de hacerle saber a systemd que un servicio de inicio necesita un proceso para considerarse activo? En otras palabras, ¿hacerle saber que active (exited)
se trata de un estado no deseado?
Respuesta1
Resolví el problema escribiendo un archivo de unidad systemd repetitivo genérico. Guarde el archivo en /etc/systemd/system/$SERVICE.service
.
Reemplace $SERVICE
con el nombre del servicio.
[Unit]
Description=$SERVICE init script wrapper
After=network.target
[Service]
ExecStart=/etc/init.d/$SERVICE start
ExecStop=/etc/init.d/$SERVICE stop
ExecReload=/etc/init.d/$SERVICE reload
PIDFile=/var/run/$SERVICE.pid
RemainAfterExit=no
Restart=always
Type=forking
[Install]
WantedBy=multiuser.target
Ejecute systemctl daemon-reload
para actualizar las partes internas de systemd.