Nota: Escribí un artículo en Medium que explica cómo crear un servicio y cómo evitar este problema en particular: Crear un servicio de Linux con systemd .
Pregunta original
Estoy usando systemd para mantener un script de trabajo funcionando en todo momento:
[Unit]
Description=My worker
After=mysqld.service
[Service]
Type=simple
Restart=always
ExecStart=/path/to/script
[Install]
WantedBy=multi-user.target
Aunque el reinicio funciona bien si el script sale normalmente después de unos minutos, he notado que si falla repetidamente en el inicio, systemd
simplemente dejará de intentar iniciarlo:
Jun 14 11:10:31 localhost systemd[1]: test.service: Main process exited, code=exited, status=1/FAILURE
Jun 14 11:10:31 localhost systemd[1]: test.service: Unit entered failed state.
Jun 14 11:10:31 localhost systemd[1]: test.service: Failed with result 'exit-code'.
Jun 14 11:10:31 localhost systemd[1]: test.service: Service hold-off time over, scheduling restart.
Jun 14 11:10:31 localhost systemd[1]: test.service: Start request repeated too quickly.
Jun 14 11:10:31 localhost systemd[1]: Failed to start My worker.
Jun 14 11:10:31 localhost systemd[1]: test.service: Unit entered failed state.
Jun 14 11:10:31 localhost systemd[1]: test.service: Failed with result 'start-limit'.
Del mismo modo, si mi script de trabajo falla varias veces con un estado de salida de 255
, systemd
deja de intentar reiniciarlo:
Jun 14 11:25:51 localhost systemd[1]: test.service: Failed with result 'exit-code'.
Jun 14 11:25:51 localhost systemd[1]: test.service: Service hold-off time over, scheduling restart.
Jun 14 11:25:51 localhost systemd[1]: test.service: Start request repeated too quickly.
Jun 14 11:25:51 localhost systemd[1]: Failed to start My worker.
Jun 14 11:25:51 localhost systemd[1]: test.service: Unit entered failed state.
Jun 14 11:25:51 localhost systemd[1]: test.service: Failed with result 'start-limit'.
¿Hay alguna forma de forzar systemd
a volver a intentar siempre después de unos segundos?
StartLimitIntervalSec=0
y voilà.