क्या सिस्टमड त्रिशंकु प्रक्रियाओं का पता लगा सकता है और मार सकता है?


16

फ़ाइल लॉकिंग का उपयोग करने वाले समाधान पर काम करते हुए, मेरा मानना ​​है कि मेरा कोड गतिरोध में है। मैं सिस्टम स्टार्टअप पर प्रक्रिया को किक करने के लिए systemd का उपयोग कर रहा हूं। अलार्म का उपयोग करना (3) एक विकल्प है, लेकिन मैं सोच रहा था कि क्या सिस्टम के लिए त्रिशंकु प्रक्रियाओं का पता लगाने और उन्हें पुनः आरंभ करने का कोई तरीका है?

वर्तमान में इस समस्या को कम करने के लिए, मैं जर्नलैक्ट आउटपुट को देखने की योजना बना रहा हूं और यदि यह निर्दिष्ट समय के लिए नहीं बदलता है, तो मैं इस प्रक्रिया को शेल स्क्रिप्ट के माध्यम से मारूंगा।

बस सोच रहा था कि सिस्टमड या अन्यथा के माध्यम से प्रक्रियाओं की निगरानी करने का एक बेहतर तरीका है।


शायद ऩही। यदि प्रक्रिया लटका दी जाती है तो आप कैसे बताते हैं? क्या होगा यदि आपको वास्तव में कुछ पसंद है for(;;) do_something();?
mvp

4
कड़ाई से बोलते हुए, यदि आपका कोड लटका हुआ है तो आपको उस समस्या पर बहस करनी चाहिए। सिस्टमड के माध्यम से इसे मारना (ऐसा करना वह किया जा सकता है, जिसे मैं नहीं मानता) या किसी अन्य तरीके से आप इसे डीबग करने के लिए उचित काम करते हैं। लेकिन आप इसे गतिरोध में जाने के लिए स्वतंत्र नहीं छोड़ सकते।
MariusMatutiae

जवाबों:


25

हाँ; लेकिन पहले अपने बगिया प्रोग्राम को सिस्टमड के साथ फ़िडलिंग से पहले ठीक करें।

MariusMatutiae काफी सही है। आपको अपने कार्यक्रम में कोई समस्या है। यह गतिरोध करता है। सिस्टमड के साथ फिडलिंग का जवाब नहीं है। सबसे अच्छा, यह एक व्याकुलता है। अपने प्रोग्राम को ठीक करें ताकि वह टूटे नहीं। अपनी ऊर्जा को सही चीज पर निर्देशित करें।

उस व्यक्ति ने कहा, प्रश्न उचित होने के बजाए अन्य लोग यहां आने वाले हैं। उनके लाभ के लिए, यहां शीर्षक का उत्तर है, प्रश्न की उचित अनदेखी करना:

हां, systemd dæmons की निगरानी कर सकता है और यदि वे बात करना बंद कर देते हैं तो स्वचालित रूप से उन्हें पुनः आरंभ कर सकते हैं। हालांकि कोई पुराना डामोन नहीं है। Mvp नोट के रूप में, यह जानने का कोई तरीका नहीं है कि डॉमन को लटका दिया गया है (इस ब्रह्मांड में, जहां रुकने की समस्या कम नहीं है, कम से कम)। न तो सिस्टमड और न ही कोई अन्य कंप्यूटर प्रोग्राम कभी भी खरोंच से कटौती करने में सक्षम होगा कि उन पर फेंके गए कुछ यादृच्छिक कार्यक्रम गतिरोध हो गए हैं, या एक अनंत लूप में चले गए हैं, या जो भी हो। यहां आपको जो सबसे अच्छा मिलेगा, वह यह पता लगा रहा है कि एक डॉमन ने एक आवश्यक समय-सीमा के भीतर एक नियमित "दिल की धड़कन" ऑपरेशन नहीं किया है।

सिस्टम के वॉचडॉग क्षमताओं का लाभ उठाने वाले डमन्स को सिस्टम-विशिष्ट प्रोटोकॉल, sd_notify प्रोटोकॉल बोलने के लिए लिखा जाना चाहिए। इससे d codemon कोड एक बालक बन जाता है। यह आगे जटिल है क्योंकि d complicatedmons चाहिए, अगर ठीक से लिखा गया है, तो जांचें कि क्या उन्हें वॉचडॉग फ़ंक्शन सक्षम होने के साथ-साथ लागू किया गया है।

एक प्रोटोकॉल है जो सिस्टमड की वॉचडॉग क्षमता का उपयोग करने के लिए इस प्रोटोकॉल को बोलता है ...

  • ... WATCHDOG_USECपर्यावरण चर के लिए जाँच करनी चाहिए ;
  • … को sd_notify () लगातार और अक्सर अपने पूरे जीवनकाल में, WATCHDOG=1विकल्प सेट के साथ, लगभग 2/2 के अंतराल पर WATCHDOG_USEC("USEC" microseconds के लिए खड़ा है ) कॉल करना होगा ;
  • ... Type=notifyइसकी इकाई फ़ाइल में सेट होना चाहिए ;
  • … इसकी इकाई फ़ाइल में सेट NotifyAccess=main(या =all) होना चाहिए ;
  • … इसकी इकाई फ़ाइल में WatchdogSec=सेकंड सेट होना चाहिए ।
  • … के साथ लिंक करना होगा libsystemd-daemon.so

यदि आप इस कोडिंग का विवरण जानना चाहते हैं, तो मैनुअल पढ़ने के बाद, सुनिश्चित करें कि आप सही StackExchange पर जाएँ। यह सुपरयूजर है। StackOverflow वहाँ पर है

आगे की पढाई

  • लेन्नर्ट पोइटरिंग। 2011-04-12। पहरेदार । Freedesktop.org।

2
बेशक, मुझे इस मुद्दे को ठीक करना है, मेरा एकमात्र इरादा एक अस्थायी हैक करना था जब तक कि मैं इस मुद्दे का पता नहीं लगाता। विस्तृत उत्तर के लिए धन्यवाद।
फ्रीथिंकर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.