Lý lịch
Tôi đã được yêu cầu tạo một systemdkị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_daemonrơ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 systemdtậ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ụ, systemdsẽ:
- Cố gắng tắt máy duyên dáng foo_daemonthông quaSIGTERM.
- Dành tối đa 2 giây để tắt / kết thúc foo_daemonhoàn thành.
- Cố gắng ngừng hoạt động foo_daemonthông quaSIGKILLnế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àsystemdcác vấn đềSIGKILLchố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 SIGKILLtheo quy trình 'PID mà không quan tâm đến việc tiêu diệt một PID tái chế.