Lưu ý: Tôi đã viết một bài viết trên Medium giải thích cách tạo một dịch vụ và cách tránh vấn đề cụ thể này: Tạo một dịch vụ Linux với systemd .
Câu hỏi gốc:
Tôi đang sử dụng systemd để giữ cho tập lệnh worker luôn hoạt động:
[Unit]
Description=My worker
After=mysqld.service
[Service]
Type=simple
Restart=always
ExecStart=/path/to/script
[Install]
WantedBy=multi-user.target
Mặc dù khởi động lại hoạt động tốt nếu tập lệnh thoát bình thường sau vài phút, tôi đã nhận thấy rằng nếu nó liên tục không thực thi khi khởi động, systemd
sẽ bỏ cuộc khi cố gắng khởi động nó:
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'.
Tương tự, nếu tập lệnh worker của tôi thất bại nhiều lần với trạng thái thoát 255
, hãy systemd
từ bỏ việc thử khởi động lại nó:
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'.
Có cách nào để buộc systemd
để luôn thử lại sau vài giây?
StartLimitIntervalSec=0
và voilà.