लिनक्स: कई प्रक्रियाओं पर नजर रखने के लिए एक वॉचडॉग लिखना


14

कुछ साल पहले, एक सहकर्मी एक प्रहरी कार्यक्रम के लिए एक सुंदर समाधान लेकर आया था। कार्यक्रम विंडोज़ पर चला और कई अनुप्रयोगों के प्रक्रिया हैंडल (पीआईडी) की निगरानी के लिए विंडोज इवेंट ऑब्जेक्ट का उपयोग किया । यदि किसी एक प्रक्रिया को अप्रत्याशित रूप से समाप्त कर दिया जाता है, तो इसकी प्रक्रिया संभाल नहीं रह जाएगी और उसके प्रहरी को तुरंत संकेत दिया जाएगा। वॉचडॉग तब सिस्टम को "ठीक" करने के लिए एक उचित कार्रवाई करेगा।

मेरा सवाल यह है कि आप लिनक्स पर इस तरह के वॉचडॉग को कैसे लागू करेंगे? क्या एक कार्यक्रम के लिए कई अन्य लोगों के पीआईडी ​​की निगरानी करने का एक तरीका है?


यह भी सुनिश्चित करें कि एक प्रक्रिया हमेशा निगरानी / पर्यवेक्षण कार्यक्रमों की सूची के लिए चल रही है।
गिल्स एसओ- बुराई को रोकें '

: इसके अलावा stackoverflow देख stackoverflow.com/questions/9400724/...
माइक पेनिंगटन

जवाबों:


17

पारंपरिक, पोर्टेबल, आमतौर पर इस्तेमाल किया जाने वाला तरीका यह है कि माता-पिता की प्रक्रिया अपने बच्चों पर नजर रखती है।

बुनियादी प्राइमिटिव waitऔरwaitpid सिस्टम कॉल हैं। जब एक बच्चे की प्रक्रिया की मृत्यु हो जाती है, तो माता-पिता की प्रक्रिया को एक SIGCHLDसंकेत मिलता है , यह कहते हुए कि यह waitपता होना चाहिए कि किस बच्चे की मृत्यु हुई और उसके बाहर निकलने की स्थिति। इसके बजाय मूल प्रक्रिया को अनदेखा करना SIGCHLDऔर waitpid(-1, &status, WNOHANG)अपनी सुविधानुसार कॉल करना चुन सकते हैं ।

कई प्रक्रियाओं की निगरानी करने के लिए, आप या तो उन सभी को एक ही माता-पिता से मिलवाएंगे, या उन सभी को एक साधारण निगरानी प्रक्रिया के माध्यम से आमंत्रित करेंगे, जो कि केवल वांछित कार्यक्रम को कॉल करता है, इसे समाप्त करने के लिए इंतजार करता है और समाप्ति पर रिपोर्ट करता है (शेल सिंटैक्स में: myprogram; echo myprogram $? >>/var/run/monitor-collector-pipe )। यदि आप विंडोज की दुनिया से आ रहे हैं, तो ध्यान दें कि एक विशेष कार्य करने वाले छोटे कार्यक्रमों का यूनिक्स दुनिया में एक सामान्य डिजाइन है, ओएस को प्रक्रियाओं को सस्ता बनाने के लिए डिज़ाइन किया गया है।

कई प्रक्रिया निगरानी (पर्यवेक्षक भी कहा जाता है) कार्यक्रम हैं जो रिपोर्ट कर सकते हैं जब एक प्रक्रिया मर जाती है और वैकल्पिक रूप से इसे फिर से शुरू करें और इसके अलावा: मॉनेट , पर्यवेक्षण , अपस्टार्ट ,…


+1, बिल्कुल वही, जिसकी मुझे तलाश थी - इतने विस्तृत उत्तर के लिए धन्यवाद।
जस्टिन एथियर

0

इस मुद्दे पर मेरा दृष्टिकोण init का उपयोग करना है और इसके अंतर्निहित रिस्पॉन्स निर्देश को शुरू करने / पुनः आरंभ करने के लिए जो भी आपको चलाने की आवश्यकता है। यह इसका मूल उद्देश्य और मुख्य उद्देश्य था। कुछ मामलों में आपको किसी प्रक्रिया के मरने के बाद स्क्रिप्ट को चलाने की आवश्यकता होगी, या प्रक्रिया को शुरू करने के लिए तैयार करने के लिए (ज्यादातर समय काम एक ही है)। ज्यादातर मामलों में निष्पादन में समाप्त होने वाली बैश स्क्रिप्ट इसके लिए बहुत अच्छा काम करती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.