Примітка. Я написав статтю на Medium, в якій пояснюється, як створити службу та як уникнути цієї конкретної проблеми: Створення служби Linux із системою systemd .
Оригінальне запитання:
Я використовую systemd, щоб постійно підтримувати робочий скрипт:
[Unit]
Description=My worker
After=mysqld.service
[Service]
Type=simple
Restart=always
ExecStart=/path/to/script
[Install]
WantedBy=multi-user.target
Хоча перезапуск працює нормально, якщо сценарій закінчується нормально через кілька хвилин, я помітив, що якщо він кілька разів не вдасться виконати при запуску, systemd
просто відмовиться від спроби його запустити:
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'.
Аналогічно, якщо мій сценарій працівника кілька разів не працює зі статусом виходу 255
, systemd
відмовиться від спроби перезапустити його:
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'.
Чи є спосіб , щоб змусити , systemd
щоб завжди повторити через кілька секунд?
StartLimitIntervalSec=0
і voilà.