Tôi có một trình nền cũ của trường mà tôi muốn điều khiển bằng systemd. Khi tập tin cấu hình của nó thay đổi, nó cần phải bị hủy và khởi động lại. Nói cách khác, sau khi chỉnh sửa tập tin cấu hình, systemctl reload MYSERVICE
nên giết tiến trình và khởi động lại nó.
Nỗ lực 1: Thử mặc định. Điều này cho systemd biết cách khởi động daemon, nhưng không phải cách tải lại nó.
[Service]
ExecStart=/usr/bin/MYSERVICE
Type=simple
Kết quả là, start
và restart
làm việc, nhưng reload
đưa ra lỗi này:
# systemctl reload MYSERVICE
Failed to reload MYSERVICE.service: Job type reload is not applicable for unit MYSERVICE.service.
Nỗ lực 2: Nói cho nó biết làm thế nào để giết quá trình. Điều này giết chết quá trình nhưng systemd không khởi động lại nó cho tôi.
[Service]
ExecStart=/usr/bin/MYSERVICE
Type=simple
ExecReload=/bin/kill -HUP $MAINPID
...theo dõi bởi...
# systemctl daemon-reload
# systemctl reload MYSERVICE
... giết quá trình nhưng nó không được khởi động lại tự động.
Cố gắng 3: Sử dụng ExecReload để khởi động lại quá trình. Điều này thất bại vì một vài lý do:
ExecReload=/bin/kill -HUP $MAINPID ; /usr/bin/MYSERVICE
... thông báo lỗi tôi nhận được ...:
# systemctl daemon-reload
# systemctl reload MYSERVICE
Job for MYSERVICE.service failed because the control process exited with error code. See "systemctl status MYSERVICE.service" and "journalctl -xe" for details.
Tôi hy vọng sẽ có một Tải lại = kill_and_restart hoặc một cái gì đó nhưng không có may mắn như vậy.
Làm thế nào để bảo systemd giết và khởi động lại một daemon khi tải lại?