क्रोन डेमॉन कितना सटीक है?


22

क्या क्रोन जॉब शेड्यूलर वास्तव में सटीक है?

मेरा मतलब है, मुझे हर रात नवीनतम संभव चलाने के लिए एक स्क्रिप्ट की आवश्यकता है, लेकिन अगले दिन 00:00 से पहले बीयूटी।

मैं आदर्श रूप से 23.59 (या 11:59 बजे) पर क्रॉन जॉब चलाऊंगा, लेकिन क्या सिस्टम वास्तव में सटीक होगा? चूँकि दूसरी बात मायने रखती है, क्या मुझे क्रोन जॉब को 23:58 पर सेट करना चाहिए ताकि इसे कुछ समय के लिए छोड़ दिया जा सके?


13
आपके पास ये आवश्यकताएं क्यों हैं? मुझे लगता है कि आप जो भी करने की कोशिश कर रहे हैं उसे करने का एक बेहतर तरीका होगा और आप इसके बारे में भी पूछ सकते हैं। (यह सिर्फ एक क्रॉन जॉब का समय निर्धारण की तुलना में थोड़ा अधिक प्रयास करेंगे, लेकिन शायद बहुत अधिक नहीं।)
डेविड जेड

मैं 10 मिनट की सटीकता के साथ एक पुराने गूंगा क्रोन का उपयोग करता था।
joshudson

7
आपकी आवश्यकता मुझे बहुत विश्वसनीय नहीं लगती है। यदि आपके सिस्टम में आधी रात के आसपास उच्च भार है तो आप क्या करते हैं। जब तक आपके पास आरटी सिस्टम नहीं है, आप कुछ भी गारंटी नहीं दे सकते।
थॉमस इरकर

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

जवाबों:


24

क्रोन क्या गारंटी दे सकता है कि आपका काम निर्दिष्ट समय (सिस्टम घड़ी की शुद्धता के अधीन) की तुलना में जल्दी शुरू नहीं होगा। लेकिन नौकरी के समापन समय के बारे में आपको कोई गारंटी देने का कोई तरीका नहीं है। यह बहुत सारे कारकों पर निर्भर करेगा:

  • सिस्टम कितना लोड है
  • नौकरी क्या करती है
  • हार्डवेयर समस्याओं के कारण मंदी
  • नेटवर्किंग मुद्दों के कारण धीमेपन (काम संभालने के कारण नेटवर्किंग पर निर्भर करता है)

मेरी सिफारिश है कि अपने डिजाइन को ऐसे बदलें कि एक विशिष्ट समापन समय की आवश्यकता न हो।


1
ऐसा करने का सबसे आसान तरीका शायद यह है कि क्रोन के माध्यम से शुरू किया गया काम है यह इंगित करने के लिए एक फ़ाइल बनाएं कि यह चल रहा है जब भी नौकरी से बाहर निकाल दिया जाता है (सफलतापूर्वक या असफल), और फिर अगली नौकरी (यह मानते हुए कि उद्देश्य) कुछ भी करने से पहले फ़ाइल गायब होने तक प्रतीक्षा करें।
बजे एक CVn

@ माइकलकॉर्जलिंग आपको एक फ़ाइल के बजाय एक निर्देशिका का उपयोग करना चाहिए, एक फ़ाइल की जांच करना और फिर इसे बनाना परमाणु नहीं है
8bittree

1
@ 8 बिट्ट्री आप झुंड का उपयोग कर सकते हैं भले ही यह उपलब्ध हो।
user9517

1
@ MichaelKjörling लेकिन क्यों शायद ठीक मामले के साथ परेशान है जब सही मामला भी सरल है?
8bittree

4
@ 8 बिट्ट्री यदि आप उपयोग करते हैं O_CREATऔर O_EXCLझंडे हैं तो यह तब तक परमाणु होगा जब तक फ़ाइल स्थानीय फ़ाइल सिस्टम पर होती है।
कास्परड सिप

14

मुझे लगता है कि यह आपके क्रोन डेमॉन पर निर्भर करता है, लेकिन प्रलेखन और मानक संकेत देते हैं कि यदि आप मिनटों को निर्दिष्ट करते हैं, तो कार्य निर्दिष्ट मिनट पर निष्पादित होगा।

देख:

ध्यान रखें कि आपकी स्क्रिप्ट तब शुरू होगी जब घड़ी सही समय पर टिक जाएगी, लेकिन उसके कुछ समय बाद समाप्त होगी।


मेरे पास बहुत कम भार के साथ एक आभासी सर्वर है, और फिर भी एक क्रोन जो हर मिनट चलने के लिए निर्धारित है, कभी-कभी 0s, 1s, 2s, कभी-कभी 17s तक शुरू होगा। मेरा अनुमान है कि क्रोन एक आभासी सर्वर पर कम सटीक हो सकता है, क्योंकि उस सर्वर के बाहर अन्य प्रक्रिया सीपीयू जैसे संसाधनों की उपलब्धता को प्रभावित कर सकती है।
लियाम

8

आमतौर पर क्रोन 23:59:00 पर शुरू होगा , अपनी सभी क्रॉस्टैब फ़ाइलों को स्कैन करें, उन लोगों को फ़िल्टर करें जो 23:59 के लिए प्रासंगिक हैं और फिर उन्हें शुरू करें। इस फ़ाइलों को स्कैन करना बहुत तेज़ है, क्योंकि उनमें से कई नहीं हैं और वे सभी में केवल कुछ लाइनें शामिल हैं। इसलिए आमतौर पर, क्रोनॉजर्स 23:59:00 या 23:59:01 से शुरू होते हैं, इस प्रक्रिया को जानबूझकर धीमा करने के निश्चित तरीके हैं। (उदाहरण के लिए, क्रॉस्टैब पर लाखों लाइनें जोड़ें)। यदि सिस्टम पूरी तरह से ओवरलोडेड है, तो यह भी तेजी से काम नहीं करेगा।

इसके अलावा, यह स्पष्ट रूप से कार्यान्वयन पर निर्भर है।

यदि आपको बहुत सटीक शुरुआत समय की आवश्यकता है, तो आप एक प्रोग्राम बनाने से बेहतर हैं जो तब तक सोता है जब तक आप चाहते हैं और फिर चलता है (जैसे सी ++ 11 का उपयोग करके )। लेकिन एक गैर वास्तविक समय ओएस पर, यह भी सटीक नहीं होगा! इसके अलावा पीसी की घड़ी सटीक समय नहीं बताती है!

सभी मामलों में, यह केवल यह सुनिश्चित करता है कि कार्यक्रम उस समय (कम या ज्यादा) शुरू होता है जो आप चाहते हैं। इस बात की कोई गारंटी नहीं दी जा सकती है कि कार्यक्रम एक निश्चित समय तक सफल होता है , इसलिए मेरा दृढ़ता से मानना ​​है कि आपको उस आवश्यकता पर कुछ बदलना चाहिए।


2
मेरा मानना ​​है कि crontabs को मेमोरी में रखा जाता है - यदि आप सीधे crontab के पीछे की फाइलों को संपादित करते हैं (crontab -e के बजाय, जो क्रोन को पूरा होने पर सूचित करता है), तो बदलाव प्रभावी नहीं होंगे। क्रॉन के पास काम करने के लिए डाउनटाइम के oodles हैं, जो काम आ रहे हैं, यह "सो" सकता है जब तक कि सटीक दूसरा काम चलने के कारण नहीं होता है।
AMADANON इंक।

0

यह आपके समग्र स्क्रिप्ट निष्पादन समय और सर्वर समय की शुद्धता पर निर्भर करता है।

59 23 * * * /some/script/file.sh

अपनी स्क्रिप्ट का शुभारंभ करेंगे वास्तव में आप कुछ आदेश जो एक लंबे समय से काम करता है अगर 23:59 बजे, लेकिन,, स्क्रिप्ट का हिस्सा आधी रात के बाद क्रियान्वित किया जा सकता है।


ठीक 23:59 पर , इसलिए यह 23:59:00 से 23:59:59 तक हो सकता है?
AL

2
आपके पास सामान्य क्रोन में सेकंड नहीं हैं। उन अतिरिक्त 59 सेकंड को प्राप्त करने के लिए आपको अपने कोड के शीर्ष पर 'प्रतीक्षा (59)' जोड़ना होगा।
हेनरी का कैट

4
व्यवहार में @AL, मैंने हमेशा इसे xx: xx: 00 या xx: xx: 01 पर चलाया है, लेकिन एक भारी-भरकम सिस्टम पर ऐसा नहीं है और इसमें कोई वादा नहीं किया जा सकता है।
हॉब्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.