Lý lịch
Tôi đã được yêu cầu tạo một systemd
kịch bản cho một dịch vụ mới, foo_daemon
đôi khi rơi vào "trạng thái xấu" và sẽ không chết SIGTERM
(có thể do trình xử lý tín hiệu tùy chỉnh). Đây là vấn đề đối với các nhà phát triển, vì họ được hướng dẫn bắt đầu / dừng / khởi động lại dịch vụ thông qua:
systemctl start foo_daemon.service
systemctl stop foo_daemon.service
systemctl restart foo_daemon.service
Vấn đề
Đôi khi, do foo_daemon
rơi vào trạng thái xấu, chúng tôi buộc phải giết nó thông qua:
systemctl kill -s KILL foo_daemon.service
Câu hỏi
Làm cách nào tôi có thể thiết lập systemd
tập lệnh của mình foo_daemon
để bất cứ khi nào người dùng cố gắng dừng / khởi động lại dịch vụ, systemd
sẽ:
- Cố gắng tắt máy duyên dáng
foo_daemon
thông quaSIGTERM
. - Dành tối đa 2 giây để tắt / kết thúc
foo_daemon
hoàn thành. - Cố gắng ngừng hoạt động
foo_daemon
thông quaSIGKILL
nếu quá trình vẫn còn tồn tại (vì vậy chúng tôi không có nguy cơ PID bị tái chế vàsystemd
các vấn đềSIGKILL
chống lại PID sai). Thiết bị chúng tôi đang thử nghiệm sinh sản / tạo ra nhiều quy trình một cách nhanh chóng, do đó , có một mối lo ngại hiếm gặp nhưng rất thực về việc tái chế PID gây ra sự cố. - Nếu, trong thực tế, tôi chỉ hoang tưởng về việc tái chế PID, tôi đồng ý với kịch bản chỉ ban hành
SIGKILL
theo quy trình 'PID mà không quan tâm đến việc tiêu diệt một PID tái chế.