หมายเหตุ: ผมเขียนบทความเกี่ยวกับการขนาดกลางที่อธิบายถึงวิธีการสร้างบริการและวิธีการหลีกเลี่ยงปัญหานี้โดยเฉพาะอย่างยิ่ง: การสร้างบริการ 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à