चल रहे एक कार्यक्रम के 100 उदाहरणों को बनाए रखें


12

मैं वर्तमान में एक स्क्रिप्ट के 100 उदाहरणों को एक साथ चलाने के लिए पर्यवेक्षक का उपयोग कर रहा हूं। यदि कोई मर भी जाता है तो यह एक नई शुरुआत करता है।

हालांकि यह बड़ी संख्या (> 300 प्रक्रियाओं) को बनाए रखने में संघर्ष कर रहा है और मैं एक प्रतिस्थापन की तलाश में हूं। मोनिट मुझे वह नहीं लगता जो मैं चाहता हूं क्योंकि यह अलग-अलग स्क्रिप्ट की निगरानी करता है और लगता है कि यह आसानी से एक ही स्क्रिप्ट के 100 उदाहरणों को देखने में सक्षम नहीं है।

एक अलग उपकरण पर कोई सुझाव जो मैं उपयोग कर सकता हूं?


ये स्क्रिप्ट क्या कर रही हैं और आप कई उदाहरण क्यों चाहते हैं? क्या वे अलग-अलग तर्कों / परिवेशों से चल रहे हैं या क्या?

1
क्या एक साधारण बैश स्क्रिप्ट काम करेगी? कुछ इस तरह ... स्क्रिप्ट की संख्या को चलाने की संख्या को गिनें, यदि 100 से कम है, तो उस संख्या को शुरू करें जो गायब है?
गाबा

3
आप क्या खत्म करने की कोशिश कर रहे हैं? 300 प्रक्रियाओं में से कुछ क्यों मर रहे हैं? अपने कार्य को पूरा करने के लिए शायद एक बेहतर तरीका है, जिनमें से कम से कम नहीं है यदि स्क्रिप्ट चलाने के 299 उदाहरण 300 से कम अच्छे हैं, तो कुछ आपके एप्लिकेशन आर्किटेक्चर के साथ त्रुटिपूर्ण है। उन प्रक्रियाओं को फिर से शुरू करना जो यह समझे बिना मर गए कि वे क्यों मर गए, अक्सर एक और मौत हो जाएगी और इसके परिणामस्वरूप पर्याप्त ओवरहेड हो जाएगा।
msw

मैं यहाँ एक विरासत प्रणाली के साथ काम कर रहा हूँ जो URLs का प्रसंस्करण कर रही है और प्रत्येक को अपने स्वयं के धागे (PHP में लिखे जा रहे हैं) की आवश्यकता है। हां, वास्तुकला त्रुटिपूर्ण है, लेकिन अभी भी इसके साथ काम करना है ... फिलहाल एक नए पर काम करना :)
जोंग

जवाबों:


1

आप उपयोग कर सकते हैं:

ps h --ppid $$ | wc -l

बैश स्क्रिप्ट से बाल प्रक्रियाओं की संख्या प्राप्त करना (यह पीएस शामिल है याद रखें)। इसलिए यदि आप चाहते हैं कि आपके पास 1000 प्रक्रियाएँ हैं जो यह देखती हैं कि क्या यह 1001 है।

cmd &

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

यह पहला कमांड पहेली का मुख्य भाग है, यह तब तक थोड़ा अधिक होना चाहिए जब तक आपके पास आपकी स्क्रिप्ट न हो।


0

मैं pgrep|wc -lएक साधारण शेल स्क्रिप्ट में इसका उपयोग या ऐसा कुछ करूंगा । प्रत्येक चेक के बीच एक सेकंड (या कम लिनक्स पर अगर आपको पसंद है) प्रतीक्षा करें sleep


0

यदि आपकी स्क्रिप्ट मर जाती है और केवल शेल पर वापस गिर जाएगी, तो आप प्रत्येक उदाहरण के लिए एक आवरण स्क्रिप्ट का उपयोग कर सकते हैं:

while [ 1 == 1 ] ; do /path/to/script ; done

या आप कुछ रैपर लिखते हैं जो लिपियों की खोज करते हैं, और wait/waitpidमृत प्रक्रियाओं को पकड़ने के लिए उपयोग करते हैं।


1
मैं कम से कम वहाँ अंत में एक नींद फेंक सकता हूँ, अगर स्क्रिप्ट में कुछ टर्मिनल-हमेशा-विफल होने की स्थिति है (स्लाइस भरा हुआ है, कॉन्फिग फाइल आदि नहीं पढ़ सकता है) .. अन्यथा आप 100 प्रक्रियाएं कर सकते हैं। सीपीयू के एक टुकड़े के लिए। इसके अतिरिक्त - 100 * (bash प्रक्रिया + फेल होने वाले ऐप के आरंभिक स्टार्टअप पदचिह्न) == संभावित रूप से एक nontrivial राशि RAM)
सिंथेसाइज़रटेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.