Linux: การเขียน watchdog เพื่อมอนิเตอร์หลายกระบวนการ


14

ไม่กี่ปีที่ผ่านมาผู้ร่วมงานได้คิดค้นวิธีแก้ปัญหาสำหรับโปรแกรมสุนัขเฝ้าบ้าน โปรแกรมรันบน Windows และใช้วัตถุ Windows Eventเพื่อตรวจสอบการจัดการกระบวนการ (PID's) ของแอพพลิเคชั่นหลายตัว หากกระบวนการใดกระบวนการหนึ่งถูกยกเลิกโดยไม่คาดคิดการจัดการกระบวนการจะไม่มีอยู่อีกต่อไปและสุนัขเฝ้าบ้านของเขาจะถูกส่งสัญญาณทันที สุนัขเฝ้าบ้านก็จะดำเนินการตามความเหมาะสมเพื่อ“ รักษา” ระบบ

คำถามของฉันคือคุณจะใช้งานสุนัขเฝ้าบ้านบน Linux อย่างไร? มีวิธีสำหรับโปรแกรมเดียวในการตรวจสอบ PID ของอื่น ๆ อีกมากมายหรือไม่?


ดูเพิ่มเติมให้แน่ใจว่ากระบวนการทำงานอยู่เสมอสำหรับรายการของโปรแกรมตรวจสอบ / กำกับดูแล
Gilles 'ดังนั้นหยุดความชั่วร้าย'

คำตอบ:


17

วิธีแบบดั้งเดิมพกพาที่ใช้กันทั่วไปคือกระบวนการของผู้ปกครองคอยดูแลเด็ก ๆ

พื้นฐานดั้งเดิมคือwaitและการwaitpidเรียกระบบ เมื่อกระบวนการลูกตายกระบวนการพ่อแม่ได้รับSIGCHLDสัญญาณบอกว่าควรเรียกwaitให้รู้ว่าเด็กคนใดเสียชีวิตและสถานะทางออก กระบวนการหลักสามารถเลือกที่จะเพิกเฉยSIGCHLDและโทรได้waitpid(-1, &status, WNOHANG)ตามความสะดวก

ในการตรวจสอบกระบวนการหลายท่านอาจจะวางไข่พวกเขาทั้งหมดได้จากแม่เดียวกันหรือเรียกพวกเขาทั้งหมดผ่านกระบวนการตรวจสอบง่ายที่เพียงแค่เรียกโปรแกรมที่ต้องการรอให้มันยุติและรายงานเกี่ยวกับการเลิกจ้าง (ในไวยากรณ์เปลือก: myprogram; echo myprogram $? >>/var/run/monitor-collector-pipe) หากคุณมาจากโลก Windows โปรดทราบว่าการมีโปรแกรมขนาดเล็กที่ทำงานพิเศษอย่างหนึ่งคือการออกแบบทั่วไปในโลก Unix ระบบปฏิบัติการได้รับการออกแบบมาเพื่อให้กระบวนการทำงานราคาถูก

มีโปรแกรมตรวจสอบกระบวนการจำนวนมาก (เรียกอีกอย่างว่าหัวหน้างาน) โปรแกรมที่สามารถรายงานเมื่อกระบวนการตายและเลือกที่จะรีสตาร์ทและอื่น ๆ อีกมากมาย: Monit , Supervise , Upstart , ...


+1, สิ่งที่ฉันกำลังมองหา - ขอบคุณสำหรับคำตอบโดยละเอียด
Justin Ethier

0

แนวทางของฉันในการแก้ไขปัญหานี้คือการใช้ init และคำสั่ง respawn ในตัวเพื่อเริ่ม / รีสตาร์ทสิ่งที่คุณต้องใช้ นี่คือความตั้งใจเดิมและวัตถุประสงค์หลัก ในบางกรณีคุณจะต้องเรียกใช้สคริปต์เพื่อล้างข้อมูลหลังจากกระบวนการตายไปหรือเพื่อเตรียมพร้อมสำหรับกระบวนการที่จะเริ่มต้น (ส่วนใหญ่เวลาทำงานเหมือนกัน) ในกรณีส่วนใหญ่สคริปต์ทุบตีที่ลงท้ายด้วย exec นั้นใช้งานได้ดีสำหรับสิ่งนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.