2009-02-18 14 views
14

मैं लिनक्स के लिए सिस्टम मॉनिटर लिख रहा हूं और कुछ वॉचडॉग कार्यक्षमता को शामिल करना चाहता हूं। कर्नेल में, आप वॉचडॉग को जारी रखने के लिए कॉन्फ़िगर कर सकते हैं भले ही/dev/watchdog बंद हो। दूसरे शब्दों में, यदि मेरा डेमन सामान्य रूप से बाहर निकलता है और/dev/watchdog बंद करता है, तो सिस्टम अभी भी 59 सेकंड बाद फिर से बूट हो जाएगा। यह उपयोगकर्ता के लिए वांछनीय व्यवहार हो सकता है या नहीं भी हो सकता है।लिनक्स सॉफ्टवेयर वॉचडॉग

मुझे अपने डिमन को इस सेटिंग से अवगत कराने की आवश्यकता है क्योंकि यह प्रभावित करेगा कि मैं सिगिनट को कैसे संभालें। यदि सेटिंग चालू है, तो मेरे डिमन को (अधिमानतः) बाहर निकलने पर व्यवस्थित शटडाउन शुरू करना होगा (कम से कम) उपयोगकर्ता को चेतावनी देगा कि सिस्टम जल्द ही रीबूट करने जा रहा है।

क्या किसी को भी इस स्थान को उपयोगकर्ता स्थान से प्राप्त करने के तरीके के बारे में पता है? मुझे मूल्य प्राप्त करने के लिए sysconf() में कुछ भी नहीं दिख रहा है। इसी प्रकार, मुझे यह बताने में सक्षम होना चाहिए कि क्या सॉफ़्टवेयर वॉचडॉग प्रारंभ करने के लिए सक्षम है या नहीं।

संपादित करें:

लिनक्स एक बहुत ही सरल प्रहरी इंटरफेस प्रदान करता है। एक बार डिवाइस खोले जाने के बाद, एक प्रक्रिया/dev/watchdog खोल सकती है, कर्नेल 60 सेकंड की गिनती को रीबूट करने के लिए शुरू कर देगा जब तक कि उस फ़ाइल में कुछ डेटा लिखा न जाए, जिस स्थिति में घड़ी फिर से सेट हो।

कर्नेल कॉन्फ़िगर करने के तरीके के आधार पर, उस फ़ाइल को बंद करना उलटी गिनती को रोक सकता है या नहीं। प्रलेखन से:

प्रहरी अगर डिवाइस /dev/प्रहरी सही ढंग से बंद कर दिया है एक रिबूट के कारण बिना रोका जा सकता है, जब तक कि आपके गिरी साथ CONFIG_WATCHDOG_NOWAYOUT विकल्प सक्षम संकलित किया गया है।

मैं अगर CONFIG_WATCHDOG_NOWAYOUT एक उपयोगकर्ता अंतरिक्ष डेमॉन के भीतर से स्थापित किया गया था बताने के लिए, ताकि मैं के बंद संभाल कर सकते हैं सक्षम होना चाहिए डेमॉन को अलग ढंग से कहा। दूसरे शब्दों में, उस सेटिंग को उच्च, एक सरल है:

# /etc/init.d/mydaemon stop 

... प्रणाली 59 सेकंड में, रिबूट क्योंकि कुछ भी नहीं करने के लिए/dev/प्रहरी अब किसी भी लिख रहा है होगा। इसलिए, यदि यह सेट उच्च है, तो SIGINT के लिए मेरे हैंडलर को अतिरिक्त चीजें करने की आवश्यकता है (यानी उपयोगकर्ता को कम से कम चेतावनी दें)।

मैं उपयोगकर्ता अंतरिक्ष से इस सेटिंग को प्राप्त करने का एक तरीका नहीं मिल रहा है :(किसी भी मदद की सराहना की है।

उत्तर

17

अहा! कर्नेल के linux/watchdog.h और drivers/watchdog/softdog.c के माध्यम से खुदाई के बाद, मैं को देखते हुए softdog ioctl() इंटरफेस की क्षमताओं निर्धारित करने में सक्षम। था क्षमताएं जोमें घोषित करती हैं:

static struct watchdog_info ident = { 
       .options =    WDIOF_SETTIMEOUT | 
             WDIOF_KEEPALIVEPING | 
             WDIOF_MAGICCLOSE, 
       .firmware_version =  0, 
       .identity =    "Software Watchdog", 
     }; 

यह समर्थन एक जादू को बंद करता है कि CONFIG_WATCHDOG_NOWAYOUT ओवरराइड (लगता है)। इसलिए, सामान्य रूप से समाप्त होने पर, मुझे एक एकल चार 'वी' /dev/watchdogपर लिखना होगा, फिर इसे बंद करें, और टाइमर गिनती बंद कर देगा।

/dev/watchdog पर फ़ाइल डिस्क्रिप्टर पर एक साधारण ioctl()WDIOC_GETSUPPORT पूछने से यह निर्धारित करने की अनुमति देता है कि यह ध्वज सेट है या नहीं। छद्म कोड:

int fd; 
struct watchdog_info info; 

fd = open("/dev/watchdog", O_WRONLY); 
if (fd == -1) { 
    perror("open"); 
    // abort, timer did not start - no additional concerns 
} 

if (ioctl(fd, WDIOC_GETSUPPORT, &info)) { 
    perror("ioctl"); 
    // abort, but you probably started the timer! See below. 
} 

if (WDIOF_MAGICCLOSE & info.options) { 
    printf("Watchdog supports magic close char\n"); 
    // You have started the timer here! Handle that appropriately. 
} 

जब हार्डवेयर पर नजर रखने वाले के साथ काम करने के लिए, आप O_NONBLOCK तो ioctl() नहीं open() ब्लॉक (इसलिए एक व्यस्त कार्ड का पता लगा) के साथ खोलने के लिए चाहते हो सकता है।

यदि WDIOF_MAGICCLOSE समर्थित नहीं है, तो बस यह मानना ​​चाहिए कि सॉफ्ट वॉचडॉग अबवेउट के साथ कॉन्फ़िगर किया गया है। याद रखें, खोलने डिवाइस सफलतापूर्वक उलटी गिनती शुरू करता है। यदि आप जो कुछ भी कर रहे हैं, यह देखने के लिए जांच कर रहा है कि यह जादू बंद करने का समर्थन करता है और यह करता है, तो जादू इसे बंद कर देता है। अन्यथा, इस तथ्य से निपटने के लिए सुनिश्चित रहें कि अब आपके पास चलने वाला वॉचडॉग है।

दुर्भाग्य से, वास्तव में इसे शुरू किए बिना निश्चित रूप से जानने के लिए कोई वास्तविक तरीका नहीं है, कम से कम मुझे नहीं मिल सका।

+2

एपीआई स्पेक में मैजिक क्लोज़ और आईओसीटीएल का विवरण उपरोक्त टिप्पणियों की पुष्टि करता है, लेकिन अधिक पृष्ठभूमि विवरण प्रदान करता है। उदाहरण के लिए [यह] (http://www.mjmwired.net/kernel/Documentation/watchdog/watchdog-api.txt) देखें। पहले पाया [यहां] (http://stackoverflow.com/a/2020516/939250)। –

3

के खिलाफ कड़ी मेहनत से ताला लगा प्रणाली, क्योंकि या तो एक सॉफ्टवेयर दुर्घटना, या हार्डवेयर विफलता की।

एक निगरानी गार्ड

क्या आप की जरूरत एक डेमॉन निगरानी डेमॉन (DMD) है। जांच 'monit'

+1

मैं एक डीएमडी लिख रहा हूं, विशेष रूप से पैरावार्च्यूलाइज्ड जेन मेहमानों पर उपयोग के लिए, जिसमें कुछ नागोस शैली की कार्यक्षमता भी है (sysinfo डेटा xenbus पर लिखा जाता है जहां इसे विशेषाधिकार प्राप्त डोमेन द्वारा देखा जा सकता है)। कृपया प्रश्न के अतिरिक्त संपादन देखें, मैं पर्याप्त स्पष्ट नहीं था। –

-2

मुझे लगता है कि वॉचडॉग डिवाइस ड्राइवर वास्तव में एम्बेडेड प्लेटफ़ॉर्म (या कम से कम अच्छी तरह से नियंत्रित वाले) पर उपयोग के लिए लक्षित हैं जहां डेवलपर्स का नियंत्रण होगा कि कौन से कर्नेल उपयोग में हैं।

इसे एक निरीक्षण माना जा सकता है, लेकिन मुझे लगता है कि यह नहीं है।

एक अन्य चीज जिसे आप कोशिश कर सकते हैं, अगर वॉचडॉग लोड करने योग्य मॉड्यूल के रूप में बनाया गया था, तो इसे उतारने से संभवतः शट डाउन को रद्द कर दिया जाएगा?

+1

यदि सॉफ्टडॉग एक लोड करने योग्य मॉड्यूल है, तो जीवन बहुत आसान हो जाता है क्योंकि यह लोड होने पर तर्क स्वीकार करता है (और हाँ, अनलोडिंग इसे रोकता है)। समस्या यह है कि एम्बेडेड सिस्टम (जिस पर आप काम कर रहे हैं, पर आप काम कर रहे हैं) पर आप अक्सर स्थिर वस्तुओं के रूप में सबकुछ के साथ मोनोलिथिक कर्नेल देखते हैं। –

+1

मुझे लगता है कि यह वास्तव में एक निरीक्षण का थोड़ा सा था, यही कारण है कि उन्होंने बाद में नरम घड़ी के जादू को जादू के करीबी चरित्र का पालन करने के लिए बदल दिया .. यानी डिवाइस पर एक 'वी' लिखना, फिर इसे बंद करना, हमेशा उलटी गिनती बंद कर देता है। –

संबंधित मुद्दे