Nota: escrevi um artigo no Medium que explica como criar um serviço e como evitar esse problema específico: Criando um serviço Linux com o systemd .
Pergunta original:
Estou usando o systemd para manter um script de trabalho funcionando o tempo todo:
[Unit]
Description=My worker
After=mysqld.service
[Service]
Type=simple
Restart=always
ExecStart=/path/to/script
[Install]
WantedBy=multi-user.target
Embora a reinicialização funcione bem se o script sair normalmente após alguns minutos, notei que, se repetidamente falhar na execução na inicialização, systemd
desistirá de tentar iniciá-lo:
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'.
Da mesma forma, se meu script de trabalho falhar várias vezes com um status de saída 255
, systemd
desiste de tentar reiniciá-lo:
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'.
Existe uma maneira de forçar systemd
a sempre tentar novamente após alguns segundos?
StartLimitIntervalSec=0
e voilà.