कुछ मरने से पहले मौन प्रतीक्षा करें


20

मैं एक कार्यक्रम (Resque) शुरू करने की कोशिश कर रहा हूं, लेकिन एक पीडफाइल लिखे जाने से पहले थोड़ा समय लगता है। इस प्रकार, मुझे लगता है कि मोनिट को लगता है कि कार्यक्रम शुरू नहीं हुआ है और पहले एक के पीडफाइल लिखे जाने से पहले एक या दो और कार्यक्रम शुरू करता है।

मैं इस प्रक्रिया के लिए फिर से समय की जाँच करने में देरी कैसे करूँ? या मुझे इसे दूसरे तरीके से हल करना चाहिए?


मैंने नीचे एक नया उत्तर जोड़ा। हालाँकि चेकों के बीच अधिक समय तक प्रतीक्षा करना धीमी सेवाओं के लिए टकराव को रोक देगा, यह ग्राहकों के लिए एक बहुत बुरा अनुभव हो सकता है।
एडी

जवाबों:


10

मैं इस प्रक्रिया के लिए फिर से समय की जाँच करने में देरी कैसे करूँ?


आप जो हासिल करने की कोशिश कर रहे हैं, वह " सेवा POLL TIME " फीचर के जरिए किया जा सकता है

मोनिट प्रलेखन कहते हैं

द्वारा दिए गए नियमित अंतराल में सेवाओं की जाँच की जाती है

set daemon n

बयान। चेक उसी क्रम में किए जाते हैं जैसे वे .monitrc फ़ाइल में लिखे होते हैं, सिवाय इसके कि क्या निर्भरताएँ सेवाओं के बीच सेटअप हैं, जिस स्थिति में सेवाएँ पदानुक्रम चेक के क्रम को वैकल्पिक कर सकती हैं।

सर्विस पोल को अनुकूलित करने की विधि में से एक है

  1. मतदान चक्र की लंबाई के आधार पर कस्टम अंतराल कई

हर [संख्या] CYCLES

उदाहरण:

check process resque with pidfile /your/app/root/tmp/pid/resque.pid
   every 2 cycles

या मुझे इसे दूसरे तरीके से हल करना चाहिए?


मैंने मॉनेट के साथ रेसक्यू नौकरियों की निगरानी के लिए प्रारंभिक प्रयास भी किया क्योंकि मॉनेट बहुत हल्का डेमॉन है लेकिन अंततः जीओडी के साथ बस गया। मुझे पता है, मुझे पता है कि जीओडी मोनिट की तुलना में अधिक भूखा है, लेकिन रेसक के मामले में हमने इसे एक अच्छा मैच पाया।


धन्यवाद! मैंने हर एक्स साइकल का इस्तेमाल किया। मुझे बस वह नंबर मिला, जो मेरे लिए काम करता था।
रेमन तयाग

19

आप डिफ़ॉल्ट से अलग अंतराल पर एक विशिष्ट सेवा की जांच कर सकते हैं ...

Monit प्रलेखन में सेवा POLL समय देखें ।

आपके Resque प्रोग्राम का एक उदाहरण विभिन्न चक्रों पर जांचना होगा:

check process resque with pidfile /var/run/resque.pid
   every 5 cycles

या उदाहरण अनुभाग से:

Some servers are slow starters, like for example Java based Application Servers. 
So if we want to keep the poll-cycle low (i.e. < 60 seconds) but allow some services to take its time to start, 
the every statement is handy:

 check process dynamo with pidfile /etc/dynamo.pid every 2 cycles
       start program = "/etc/init.d/dynamo start"
       stop program  = "/etc/init.d/dynamo stop"
       if failed port 8840 then alert

या आप क्रोन-शैली की जांच का लाभ उठा सकते हैं।

check process resque with pidfile /var/run/resque.pid
   every 10 * * * *

या यदि आप एक धीमी गति से स्टार्टअप का अनुभव कर रहे हैं, तो आप सर्विस स्टार्ट कमांड में टाइमआउट का विस्तार कर सकते हैं:

check process apache with pidfile /var/run/httpd.pid
       start program = "/etc/init.d/httpd start" with timeout 90 seconds

एक ही जवाब, सही?
इविहित

2
with timeout 90 secondsजैसा मैं चाहता था वैसा ही हुआ। धन्यवाद।
एंड्रयू

1
टाइमआउट और क्रोन-शैली को शामिल करने के लिए यश। यह सबसे सटीक और पूर्ण उत्तर है।
RCross

9

आप यह भी देख सकते हैं कि क्या कुछ एक्स के लिए सीधे विफल हो गया है:

 if failed 
    port 80 
    for 10 cycles 
 then alert

या वाई चुनावों के भीतर एक्स के लिए:

 if failed 
    port 80
    for 3 times within 5 cycles 
 then alert

अथवा दोनों:

 check filesystem rootfs with path /dev/hda1
  if space usage > 80% for 5 times within 15 cycles then alert
  if space usage > 90% for 5 cycles then exec '/try/to/free/the/space'

( यहां से )


1
यह एक और बहुत अच्छा जवाब है, क्योंकि यह दिखाता है कि आप डिफ़ॉल्ट अंतराल पर कैसे जांच कर सकते हैं, लेकिन केवल अधिक क्षमा के आधार पर कार्रवाई करें।
आरसीसॉस

2

मेरी टीम का एक सदस्य एक अधिक चतुर समाधान के साथ आया था, जो मोनिट को बार-बार (हर मिनट) चेक करने की अनुमति देता है , लेकिन एक बार सेवा को फिर से शुरू करने का प्रयास किया है (जो कि ~ 10 मिनट लगते हैं) यह शुरू होने से पहले एक निर्दिष्ट अनुग्रह अवधि की प्रतीक्षा करेगा। फिर।

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

check host bamboo with address bamboo.mysite.com
   if failed
           port 443 type tcpSSL protocol http
           and status = 200
           and request /about.action
            for 3 cycles
   then exec "/bin/bash -c 'ps -ef | grep -v "$$" | grep -v "grep" | grep restartBamboo.sh >/dev/null 2>&1; if [ $? -ne 0 ]; then /opt/monit/scripts/restartBamboo.sh; fi'"

यदि एक पंक्ति में 3 मिनट के लिए बांस (धीमी शुरुआत वाला वेब ऐप) डाउन है, तो पुनरारंभ करें, लेकिन केवल तभी पुनरारंभ करें जब कोई स्क्रिप्ट स्क्रिप्ट पहले से ही नहीं चल रही हो।

स्क्रिप्ट जिसे कहा जाता है, उसमें एक निर्दिष्ट नींद होती है जो LONGER का इंतजार करती है फिर सेवा के लिए सबसे धीमी शुरुआत का समय (हमारे मामले में हम ~ 10 में समाप्त होने की उम्मीद करते हैं, इसलिए हम 15 के लिए सोते हैं)

#!/bin/bash
echo "Retarting bambo by calling init.d"
/etc/init.d/bamboo stop
echo "Stopped completed, calling start"
/etc/init.d/bamboo start
echo "Done restarting bamboo, but it will run in background for sometime before available so, we are sleeping for 15 minutes"
sleep 900
echo "done sleeping"

2

मौद्रिक का मौजूदा संस्करण (5.16) सिंटैक्स के साथ शुरुआत स्क्रिप्ट के लिए एक समय समाप्ति का समर्थन करता है:

 <START | STOP | RESTART> [PROGRAM] = "program"
    [[AS] UID <number | string>]
    [[AS] GID <number | string>]
    [[WITH] TIMEOUT <number> SECOND(S)]

डॉक्स राज्य:

एक प्रक्रिया की जाँच के मामले में, मोनेट शुरू होने से पहले 30 सेकंड तक प्रतीक्षा करेगा / कार्रवाई करने से पहले समाप्त कर देगा और एक त्रुटि की रिपोर्ट करेगा। टाइमटाइम विकल्प का उपयोग करके आप इस समय सीमा को ओवरराइड कर सकते हैं।

जो "टाइमआउट" मान है।


यदि वास्तविक शुरुआत में लंबा समय लगता है, लेकिन टाइमआउट के कामों को विस्तारित करना, लेकिन मूल प्रश्न में यह लगता है कि कार्यक्रम जल्दी शुरू हो सकता है (यानी वापस आ गया) लेकिन तुरंत पीआईडी ​​नहीं लिखा। क्या पुनरारंभ के बाद निर्दिष्ट समय के लिए सेवा की जांच नहीं करने के लिए मॉनेट को बताने का एक तरीका है?
पीटरवेर्मोंट

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

इस प्रणाली के बारे में क्या कहा गया है कि रिबूट और सेवाओं को शुरू करना? क्या प्रत्येक चेक के लिए सेकंड में, प्रारंभिक देरी को निर्दिष्ट करने का कोई तरीका है? प्रारंभ / बिना बयानों के भी निष्क्रिय जाँच
मास्सिमो

मुझे विश्वास है कि उस मामले में आप खोज रहे होंगे START DELAY
जेटी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.