Not: Medium'da nasıl bir hizmet oluşturulacağını ve bu özel sorunun nasıl önlenebileceğini açıklayan bir makale yazdım: systemd ile Linux hizmeti oluşturma .
Orijinal soru:
Bir çalışan betiğini her zaman çalışır durumda tutmak için systemd kullanıyorum:
[Unit]
Description=My worker
After=mysqld.service
[Service]
Type=simple
Restart=always
ExecStart=/path/to/script
[Install]
WantedBy=multi-user.target
Her ne kadar komut dosyası birkaç dakika sonra normal bir şekilde çıkarsa, yeniden başlatma düzgün çalışsa da, başlangıçta tekrar tekrar yürütülememesi durumunda, başlatmaya systemd
çalışmaktan vazgeçeceğini fark ettim :
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'.
Benzer şekilde, çalışan betiğim çıkış durumuyla birkaç kez başarısız olursa 255
, systemd
yeniden başlatmayı denemekten vazgeçer:
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'.
Zorlamak için bir yolu var mı systemd
etmek her zaman bir kaç saniye sonra tekrar deneyin?
StartLimitIntervalSec=0
ve voilà.