आप कर सकते हैं और यह काफी आसान है। आरपीआई में एक लिनक्स मॉड्यूल है जो मानक लिनक्स वॉचडॉग एपीआई को लागू करता है। आप इसका प्रलेखन यहाँ पा सकते हैं ।
अब, यदि आप इसे पढ़ते हैं, तो आपको पता चलेगा कि एक विशेष उपकरण फ़ाइल है, जिसे /dev/watchdog
उपयोग करने के लिए और watchdog
आपको इस फ़ाइल को खोलना होगा और कुछ डेटा (एक बाइट) लिखना होगा, 'V' के अलावा कुछ और लिखना सबसे अच्छा है, जिसे मैं ' बाद में इसे समय-समय पर समझाता हूं। यदि आप इस फ़ाइल के लिए लंबे समय तक कुछ भी नहीं लिखेंगे, watchdog
तो रिबूट को ट्रिगर किया जाएगा। आप एक उदाहरण कार्यक्रम (बहुत सरल) पा सकते हैं यहाँ ।
नोट है कि एक सामान्य स्थिति में, यदि आप इसे बंद /dev/watchdog
, watchdog
विकलांग हो सकता है। एक विशेष मोड है जिसे 'मैजिक क्लोज फीचर' कहा जाता है जिसे आरपीआई ड्राइवर द्वारा कार्यान्वित किया जाता है लेकिन AFAIK इसे डिफ़ॉल्ट कर्नेल कॉन्फ़िगरेशन (CONFIG_WATCHDOG_NOWAYOUT विकल्प) में सक्षम नहीं करता है। इस स्थिति में, रिबूट /dev/watchdog
तब भी चालू हो जाएगा जब आप ऐप छोड़ने से ठीक पहले इसे 'V' लिखेंगे।
यदि आप वास्तव में अक्षम हैं तो आपको खुद का परीक्षण करना चाहिए (मेरे पास परीक्षण करने के लिए अभी आरपीआई नहीं है), लेकिन अगर ऐसा नहीं है, तो यह आपके लिए अच्छा नहीं है। यदि आपका एप्लिकेशन क्रैश हो जाता है, तो वॉचडॉग डिवाइस फ़ाइल बंद हो जाएगी और रिबूट ट्रिगर नहीं होगा और यही कारण है कि आप इसे चाहते हैं। इस स्थिति में, आप या तो कर्नेल कॉन्फ़िगरेशन को बदल सकते हैं और इसका पुनर्निर्माण कर सकते हैं या एक अनुकूलित एप्लिकेशन लिख सकते हैं जो मॉनिटर करने जा रहा है यदि आपका मुख्य एप्लिकेशन काम कर रहा है (उदाहरण के लिए कुछ आईपीसी विधि का उपयोग करके)।
Ioctl एपीआई भी है जो आपको कुछ और करने की अनुमति देता है watchdog
। उदाहरण के लिए, आप एक अलग टाइमआउट सेट कर सकते हैं - IOCTL WDIOC_SETTIMEOUT के साथ (RPI ड्राइवर द्वारा समर्थित प्रतीत होता है) या Timeout प्राप्त करें - IOCTL WDIOC_GETTIMEOUT के साथ (जो समर्थित प्रतीत होता है)। आप इसे डिफ़ॉल्ट टाइमआउट (10 सेकंड) को संशोधित करने के लिए उपयोग करना चाह सकते हैं। हालांकि 16 सेकंड की कठिन सीमा है। यहाँ एक उदाहरण है:
int timeout = 15;
int fd = open("/dev/watchdog", O_WRONLY);
ioctl(fd, WDIOC_SETTIMEOUT, &timeout);
आप चाहें तो चरित्र लिखने के बजाय WDOCC_KEEPALIVE के साथ IOCTL का उपयोग कर सकते हैं। दोनों विधियां मान्य हैं।