2011-04-12 7 views
5

पर एक लंबे समय से चलने वाले कार्य को बनाए रखना मेरे सिस्टम में एक कार्य शामिल है जो नेटवर्क सॉकेट खोलता है, नेटवर्क से धक्का डेटा प्राप्त करता है, इसे संसाधित करता है, और संदेश के आधार पर डिस्क या अन्य मशीनों को पिंग करता है। यह कार्य हमेशा के लिए चलाने का इरादा है, और सेवा को यह कार्य हमेशा चलने के लिए डिज़ाइन किया गया है। लेकिन कभी-कभी यह दुर्घटनाग्रस्त हो जाता है।लिनक्स

इस तरह के काम को जीवित रखने के लिए सबसे अच्छा अभ्यास क्या है? मान लें कि कार्य को पुनरारंभ करने से पहले 30 सेकंड तक कार्य के लिए यह ठीक है।

कुछ स्पष्ट विचारों में वॉचडॉग प्रक्रिया शामिल है जो यह सुनिश्चित करने के लिए जांचती है कि प्रक्रिया अभी भी चल रही है। वॉचडॉग cron द्वारा ट्रिगर किया जा सकता है। लेकिन यह कैसे पता चलता है कि प्रक्रिया जिंदा है या नहीं? एक पिडफाइल लिखें? touch एक दिल की धड़कन फ़ाइल? एक आदर्श समाधान लगातार प्रक्रियाओं को तब तक नहीं बढ़ाएगा जब मशीन उस बिंदु पर फंस जाती है जहां वॉचडॉग दिल की धड़कन से तेज़ी से चल रहा है।

क्या इसके लिए मानक लिनक्स उपकरण हैं? मैं एक समाधान की कल्पना कर सकता हूं जो एक संदेश कतार का उपयोग करता है, लेकिन मुझे यकीन नहीं है कि यह एक अच्छा विचार है या नहीं।

+1

सुपरसियर में जाने के लिए वोटिंग, unix.se शायद बेहतर भी होगा। –

उत्तर

2

उस कार्य की प्रकृति के आधार पर जिस पर आप निगरानी करना चाहते हैं, एक विधि एक फोर्क() में अपना काम शुरू करने के लिए एक सरल आवरण लिखना है।

रैपर कार्य तब बच्चे पर एक प्रतीक्षापिड() कर सकता है और इसे समाप्त होने पर इसे पुनरारंभ कर सकता है।

यह उस कार्य के स्रोत को संशोधित करने पर निर्भर करता है जिसे आप चलाने के लिए चाहते हैं।

2

sysvinitinittab में जोड़े जाने पर प्रक्रियाओं को पुनरारंभ करेगा।

यदि आप क्रैश होने और प्रक्रिया को समाप्त किए बिना प्रक्रिया को ठंडा करने के बारे में चिंतित हैं, तो आप एक हार्टबीट का उपयोग कर सकते हैं और सक्रिय उदाहरण को हार्ड मार सकते हैं, जिससे इसे फिर से शुरू किया जा सके।

2

daemonize के साथ आप monit का उपयोग कर सकते हैं। * निक्स दुनिया में इसके लिए बहुत सारे टूल हैं।

2

पर्यवेक्षक इस कार्य के लिए ठीक से डिजाइन किया गया था। project website से:

पर्यवेक्षक एक क्लाइंट/सर्वर सिस्टम है जो अपने उपयोगकर्ताओं को यूनिक्स जैसे ऑपरेटिंग सिस्टम पर कई प्रक्रियाओं की निगरानी और नियंत्रण करने की अनुमति देता है।

यह एक कमांड लाइन उपकरण, supervisorctl द्वारा नियंत्रित एक डेमन (supervisord) के रूप में चलता है। कॉन्फ़िगरेशन फ़ाइल में अन्य सेटिंग्स के बीच, उन प्रोग्रामों की एक सूची होती है, जिन्हें मॉनिटर करना होता है।

विकल्पों की संख्या काफी व्यापक है, - पूरी सूची के लिए docs पर एक नज़र डालें। आपके मामले में, प्रासंगिक विन्यास खंड कुछ इस तरह हो सकता है:

[program:my-network-task] 
command=/bin/my-network-task # where your binary lives 
autostart=true     # start when supervisor starts? 
autorestart=true    # restart automatically when stopped? 
startsecs=10     # consider start successful after how many secs? 
startretries=3     # try starting how many times? 

मैं पर्यवेक्षक अपने आप का इस्तेमाल किया है और यह वास्तव में अच्छी तरह से काम सब कुछ सेट किया गया था। इसके लिए पाइथन की आवश्यकता है, जो अधिकांश वातावरण में एक बड़ा सौदा नहीं होना चाहिए लेकिन हो सकता है।

+0

मैं पर्यवेक्षक का उपयोग कर समाप्त हुआ। मैंने अनुभव वास्तव में दर्दनाक पाया। बहुत से ज्ञात, लंबे समय तक चलने वाली बग।यह बिल्कुल इस के लिए डिज़ाइन किया गया है, लेकिन अन्य परियोजनाएं जैसे कि भगवान या मोनिट। काश मैं कुछ और चुना था। YMMV। – Leopd