พื้นหลัง
ฉันถูกขอให้สร้างsystemd
สคริปต์สำหรับบริการใหม่foo_daemon
ซึ่งบางครั้งอาจเข้าสู่ "สถานะไม่ดี" และจะไม่ตายSIGTERM
(อาจเกิดจากตัวจัดการสัญญาณที่กำหนดเอง) นี่เป็นปัญหาสำหรับนักพัฒนาเนื่องจากได้รับคำแนะนำให้เริ่ม / หยุด / เริ่มบริการใหม่ผ่าน:
systemctl start foo_daemon.service
systemctl stop foo_daemon.service
systemctl restart foo_daemon.service
ปัญหา
บางครั้งเนื่องจากfoo_daemon
การเข้าสู่สถานะที่ไม่ดีเราต้องบังคับให้ฆ่าผ่าน:
systemctl kill -s KILL foo_daemon.service
คำถาม
ฉันจะตั้งค่าsystemd
สคริปต์ของฉันอย่างไรfoo_daemon
เพื่อที่เมื่อใดก็ตามที่ผู้ใช้พยายามหยุด / เริ่มบริการใหม่systemd
จะ:
- พยายามปิดสง่างามของผ่าน
foo_daemon
SIGTERM
- ให้มากถึง 2 วินาทีเพื่อให้การปิด / การสิ้นสุดของ
foo_daemon
เสร็จสมบูรณ์ - พยายามปิดการบังคับ
foo_daemon
ผ่านSIGKILL
ถ้ากระบวนการยังมีชีวิตอยู่ (ดังนั้นเราจึงไม่มีความเสี่ยงที่จะมีการรีไซเคิล PID และsystemd
ปัญหาSIGKILL
ต่อ PID ที่ไม่ถูกต้อง) อุปกรณ์ที่เรากำลังทดสอบวางไข่ / แยกกระบวนการจำนวนมากอย่างรวดเร็วดังนั้นจึงมีข้อกังวลที่หายาก แต่แท้จริงเกี่ยวกับการรีไซเคิล PID ที่ก่อให้เกิดปัญหา - หากในทางปฏิบัติฉันแค่หวาดระแวงเกี่ยวกับการรีไซเคิล PID ฉันก็โอเคกับสคริปต์ที่ออกมา
SIGKILL
ต่อต้านกระบวนการ 'PID โดยไม่ต้องกังวลว่าจะฆ่า PID ที่รีไซเคิลแล้ว