डेवलपर टूल · क्रोंटैब जनरेटर
ओवरलैपिंग Cron जॉब्स: लंबे कार्यों के लिए फ़्लॉक की आवश्यकता क्यों है और इसे कैसे जोड़ें
· यह क्यों मायने रखती है
Cron संगामिति परिचालन
Cron निर्धारित समय पर कार्य शुरू करता है, चाहे पिछला रन समाप्त हुआ हो या नहीं। यह पोस्ट बताती है कि यह भ्रष्टाचार और लोड स्पाइक्स का कारण क्यों बनता है, और झुंड मुहावरे को दिखाता है जो रन को विशिष्ट बनाता है।
एक ही तालिका लिखने वाले दो आयात - प्रति घंटे का काम एक घंटे से भी धीमा हो गया और Cron नई प्रतियां शुरू करता रहा
एक घंटे की अभिव्यक्ति एक नए उम्मीदवार की पहचान कर सकती है जबकि पिछले उम्मीदवार से जुड़ा काम अभी भी चल रहा है। `0 * * * *` में कुछ भी अवधि, प्रक्रिया पहचान या पूर्णता स्थिति को रिकॉर्ड नहीं करता है। ToolAcre प्रत्येक घंटे के लिए मिनट शून्य का विस्तार करता है और भविष्य के समय को सूचीबद्ध कर सकता है, लेकिन यह उन समयों के बीच की गतिविधि को कभी नहीं देखता है।
इसका मतलब है कि आवृत्ति और विशिष्टता की अलग से समीक्षा की जानी चाहिए। यदि कोई कार्य अपने अंतराल को समाप्त कर सकता है, तो पहले लक्ष्य प्रणाली पर अवधि निर्धारित करें। फिर वहां समर्थित एक समवर्ती नियंत्रण चुनें। एक सही शेड्यूल को संपादित करने से मौजूदा प्रक्रिया का ज्ञान नहीं बढ़ सकता है या दूसरे आह्वान को रोका नहीं जा सकता है।
अभिव्यक्ति में कोई रनिंग-जॉब स्थिति नहीं है
पार्सर सभी कॉलों में स्टेटलेस है। यह टेक्स्ट को क्रमबद्ध मान सारणियों और चेतावनियों में परिवर्तित करता है, जबकि `nextRuns` प्रक्रिया तालिका के बिना दिनांक खोजता है। UI वर्तमान अभिव्यक्ति से पुनर्गणना करता है और कार्य जीवनचक्र को बरकरार नहीं रखता है। इसका मॉडल पूछता है कि कब, कभी नहीं कि पिछली क्रिया सक्रिय रहती है या नहीं।
यह लेख शीर्षक के पीछे सटीक प्रमाण है। इसके लिए किसी दावे की आवश्यकता नहीं है कि प्रत्येक Cron डेमॉन कैसे कांटा या कतार बनाता है। अभिव्यक्ति भाषा में स्वयं ओवरलैप फ़ील्ड का अभाव है, और जनरेटर में रनटाइम मॉनिटर का अभाव है। किसी भी विशिष्टता की गारंटी एक अलग परत से आनी चाहिए जिसके व्यवहार का स्वतंत्र रूप से परीक्षण किया जाता है।
संभावित ओवरलैप लक्षण कमांड पर निर्भर करते हैं और जनरेटर द्वारा भविष्यवाणी नहीं की जाती है
ओवरलैप डुप्लिकेट किए गए कार्य, लॉक विवाद या लोड से संबंधित हो सकता है, लेकिन ये परिणाम इस बात पर निर्भर करते हैं कि कमांड क्या करता है। एक रीड-ओनली इडेम्पोटेंट चेक और एक स्टेटफुल आयात में एक ही घंटे की अनुसूची के तहत भी अलग-अलग जोखिम होते हैं। ToolAcre के पास कोई कमांड पार्सर, डेटाबेस कनेक्शन या संसाधन मॉडल नहीं है जिससे उनका पूर्वानुमान लगाया जा सके।
अभिव्यक्ति में सामान्य विफलता पूर्वानुमान संलग्न करने के बजाय कार्रवाई के समवर्ती गुणों का दस्तावेज़ीकरण करें। सामान्य और सबसे खराब देखी गई अवधि को मापें, साझा स्थिति की पहचान करें और तय करें कि छोड़े गए या विलंबित रन का क्या मतलब है। वे परिचालनात्मक तथ्य यह निर्धारित करते हैं कि विशिष्टता आवश्यक है या नहीं; पाँच क्षेत्र केवल उम्मीदवार का समय निर्धारित करते हैं।
झुंड वाक्यविन्यास और व्यवहार इस भंडार के बाहर हैं
कार्यपुस्तिका में `flock -n`, एक लॉक पथ और निकास व्यवहार निर्धारित किया गया है। इस रिपॉजिटरी में कोई झुंड कार्यान्वयन या परीक्षण दिखाई नहीं देता है, इसलिए यह मॉड्यूल उस सिंटैक्स को मान्य नहीं करता है। प्लेटफ़ॉर्म उपलब्धता, फ़ाइल सिस्टम अनुमतियाँ और लॉक लाइफ़टाइम सभी ब्राउज़र के शेड्यूल कोड से बाहर हैं।
यदि झुंड लक्ष्य पर उपयुक्त है, तो उसके स्थापित दस्तावेज़ का उपयोग करें और वहां हानिरहित विवाद परिदृश्य का परीक्षण करें। सफलता का अनुमान न लगाएं क्योंकि पूर्वनिर्धारित समय फ़ील्ड ToolAcre पास करते हैं। एक वैध अभिव्यक्ति एक अमान्य लॉक कमांड से पहले हो सकती है, जैसे एक सही लॉक किसी अन्य बोली के लिए लिखे गए शेड्यूल की रक्षा कर सकता है।
कार्य सीमा: लॉक सिमेंटिक्स का दावा किए बिना प्रति घंटा समय की पुष्टि करें
कार्यसूची के रूप में `0 * * * *` का उपयोग करें। विवरण कहता है कि प्रत्येक घंटे के बाद शून्य मिनट बीतता है, और पूर्वावलोकन को आरंभिक क्षण के बाद क्रमिक घंटे की सीमाओं तक आगे बढ़ना चाहिए। यह ताल ToolAcre गणना को सिद्ध करता है। यह साबित नहीं होता कि जब आदेश की अवधि उन सीमाओं में से किCAक को पार कर जाती है तो क्या होता है।
उस प्रति घंटा अपेक्षा को लक्ष्य-पक्ष समवर्ती परीक्षण में शामिल करें। एक हानिरहित लंबे समय तक चलने वाला उदाहरण शुरू करें, अगले उम्मीदवार तक पहुंचें और चुने गए नियंत्रण का निरीक्षण करें। निष्पादन साक्ष्य के रूप में परिणामों को अभिव्यक्ति समीक्षा से अलग रखें। यदि समय या लॉकिंग में बाद में परिवर्तन होता है तो यह एक स्वच्छ निदान को सुरक्षित रखता है।
वैकल्पिक विशिष्टता तंत्र को लक्ष्य-विशिष्ट साक्ष्य की आवश्यकता होती है
स्क्रिप्ट के अंदर ताले, पर्यवेक्षक नीतियां और सेवा-प्रबंधक व्यवहार सभी विशिष्टता प्रदान कर सकते हैं, लेकिन उनके शब्दार्थ को इस स्रोत से रैंक नहीं किया जा सकता है। ToolAcre को यह भी नहीं पता कि एक रन चूकना स्वीकार्य है या नहीं, क्या कार्य कतार में होना चाहिए या क्या दूसरा प्रयास बंद होना चाहिए।
किसी तंत्र का चयन करने से पहले उन परिणामों को परिभाषित करें। "कभी ओवरलैप न करें" केवल एक नीति है; विभाजित राज्य के साथ एकजुट होना, कतारबद्ध होना और समानता अन्य हैं। जनरेटर नीति चर्चा में प्रयुक्त उम्मीदवार ताल की आपूर्ति कर सकता है, जबकि कार्यान्वयन विकल्प वास्तविक रनटाइम पर आधारित रहता है।
वितरित लॉकिंग शेड्यूल पार्सिंग और पूर्वावलोकन दोनों के बाहर रहती है
मेजबानों के बीच साझा किया गया लॉक स्थानीय कैलेंडर गणना से परे समन्वय का परिचय देता है। पार्सर में कोई होस्ट पहचान, नेटवर्क स्टोर या लीज़ दिखाई नहीं देता है। इसलिए लेख यह सुझाव देने से बचता है कि एक स्थानीय फ़ाइल या ब्राउज़र पूर्वावलोकन वितरित समवर्ती को हल करता है।
मल्टी-होस्ट कार्य के लिए, एक समन्वय डिज़ाइन का उपयोग करें जिसके विफलता मोड, स्वामित्व और पुनर्प्राप्ति व्यवहार का दस्तावेजीकरण और परीक्षण किया जाता है। पांच-फ़ील्ड शेड्यूल को उस सिस्टम में एक इनपुट के रूप में रखें। एक अभिव्यक्ति पूरी तरह से पोर्टेबल हो सकती है जबकि विशिष्टता परत गहराई से पर्यावरण-विशिष्ट है।
टेकअवे: शेड्यूल और विशिष्टता अलग-अलग समस्याएं हैं - जनरेटर पहले को संभालता है, झुंड दूसरे को संभालता है
जब कोई अन्य प्रयास योग्य हो जाता है तो उत्तर शेड्यूल करना; विशिष्टता उत्तर देती है कि क्या यह प्रारंभ हो सकता है। ToolAcre फ़ील्ड विस्तार और वॉल-क्लॉक पूर्वावलोकन के माध्यम से केवल पूर्व को लागू करता है। इसकी प्रक्रिया स्थिति की कमी एक वास्तुशिल्प सीमा है, न कि कोई छिपी हुई डिफ़ॉल्ट।
ताल बनाएं और सत्यापित करें, कार्रवाई की अवधि मापें, फिर लक्ष्य-समर्थित समवर्ती नीति का परीक्षण करें। उन्हें अलग-अलग नियंत्रणों के रूप में रिपोर्ट करना दोनों को समीक्षा योग्य बनाता है। जनरेटर नौकरियों को शेड्यूल नहीं करता है, और कॉपी की गई अभिव्यक्ति को कभी भी ओवरलैपिंग निष्पादन के खिलाफ सुरक्षा के रूप में वर्णित नहीं किया जाना चाहिए।