डेवलपर टूल · क्रोंटैब जनरेटर
Cron में महीने का दिन बनाम सप्ताह का दिन: OR नियम जो सभी को आश्चर्यचकित करता है
· यह काम किस प्रकार करता है
Cron कैलेंडर अनुसूची बनाना
जब दोनों दिन के क्षेत्र प्रतिबंधित होते हैं, तो Cron काम चलाता है यदि दोनों में से कोई भी मेल खाता हो। यह पोस्ट crontab(5) के नियम की व्याख्या करती है, यह क्यों मौजूद है, और इसके द्वारा रोके गए शेड्यूल को कैसे प्राप्त किया जाए।
रिपोर्ट 1 और प्रत्येक सोमवार को चलती है - अभिव्यक्ति 0 9 1 * 1 का वह अर्थ नहीं है जो यह दिखता है
यदि दो दिन के कॉलम को संचयी फ़िल्टर के रूप में पढ़ा जाता है, तो `0 9 1 * 1` जैसी अभिव्यक्ति "पहले सोमवार को 09:00" जैसी दिखती है। ToolAcre इसे इस तरह नहीं पढ़ता है। महीने का दिन 1 पर और सप्ताह का दिन सोमवार पर सेट होने पर, पार्सर चेतावनी देता है कि कोई भी स्थिति मेल खा सकती है, इसलिए शेड्यूल में हर पहला और हर सोमवार शामिल है।
यह कोई छोटी-मोटी शब्दावली प्राथमिकता नहीं है. एक मासिक रिपोर्ट चार या पांच अतिरिक्त बार चल सकती है, और केवल सोमवार को अपेक्षित ऑपरेशन महीने के पहले दिन भी चल सकता है। जनरेटर विवरण के बगल में "जाँचने लायक" चेतावनी रखता है ताकि किसी अभिव्यक्ति को बाहरी क्रॉस्टैब में कॉपी करने से पहले विस्तारित व्यवहार दिखाई दे।
नियम जैसा लिखा है - यदि महीने का दिन और सप्ताह का दिन दोनों प्रतिबंधित हैं, तो कमांड तब चलता है जब कोई भी फ़ील्ड मेल खाता है
कार्यान्वयन का `dayMatches` फ़ंक्शन स्पष्ट रूप से चार मामलों को संभालता है। प्रत्येक दिनांक को दो वाइल्डकार्ड स्वीकार होते हैं; महीने का एक वाइल्डकार्ड दिन कार्यदिवस के लिए स्थगित कर दिया जाता है; एक वाइल्डकार्ड कार्यदिवस महीने के दिन के लिए स्थगित हो जाता है; और दो प्रतिबंधित फ़ील्ड अपने मैचों का तार्किक OR लौटाते हैं। परीक्षण केवल तेरहवीं, केवल शुक्रवार और किसी भी स्थिति से मेल खाने वाली तारीख को कवर करते हैं।
विवरण समान नियम का पालन करते हैं। `0 0 13 * 5` को "महीने की 13 तारीख़ को या शुक्रवार को" के साथ प्रस्तुत किया गया है, यह कोई अस्पष्ट संयोजन नहीं है। पार्सिंग, नेक्स्ट-रन चयन और अंग्रेजी आउटपुट सभी एक ही व्याख्या का उपयोग करते हैं। वह साझा व्यवहार एक पृथक सहायता लेबल की तुलना में अधिक मजबूत सबूत है क्योंकि उन रास्तों के बीच असहमति तुरंत भ्रामक पूर्वावलोकन पैदा करेगी।
पार्सर OR लागू करता है और परिणाम उजागर करता है; यह नियम का इतिहास स्थापित नहीं करता है
कार्यपुस्तिका की रूपरेखा ने OR डिज़ाइन के लिए एक ऐतिहासिक कारण प्रस्तुत किया, लेकिन यह भंडार उत्पत्ति के बजाय व्यवहार को साबित करता है। कोड टिप्पणियाँ विक्सी-शैली नियम की पहचान करती हैं, और परीक्षण ToolAcre द्वारा मॉडल किए गए परिणाम को स्थापित करते हैं। वे इस बात का दस्तावेजीकरण नहीं करते हैं कि नियम को किसने चुना, इसे कब अपनाया गया या अनुमतिपूर्ण व्याख्या को प्राथमिकता क्यों दी गई।
तकनीकी लेखन में उस सीमा को बनाए रखना मायने रखता है। पाठकों को यह जानने की आवश्यकता है कि यह टूल अभिव्यक्ति का विस्तार कैसे करता है; इसे सुरक्षित रूप से उपयोग करने के लिए उन्हें किसी आविष्कृत मानक कथा की आवश्यकता नहीं है। यदि कोई परिनियोजन लक्ष्य अलग-अलग दिन के शब्दार्थ का दस्तावेजीकरण करता है, तो उसका स्वयं का मैनुअल इस ब्राउज़र पूर्वावलोकन से आगे निकल जाता है। ToolAcre यह दावा करने के बजाय कि प्रत्येक अनुसूचक इससे सहमत है, वह बोली बताता है जिसकी वह गणना करता है।
व्यावहारिक उदाहरण: एक महीने के लिए 0 9 1 * 1 की गणना करना - जिन दिनों यह सक्रिय होता है, लेखक द्वारा वांछित शेड्यूल की तुलना में
उस महीने पर विचार करें जिसका पहला दिन सोमवार नहीं है। `0 9 1 * 1` प्रत्येक सोमवार को पहले और अतिरिक्त रन पर एक रन बनाता है। यदि पहला सोमवार है, तो वह तारीख अभी भी एक बार दिखाई देती है क्योंकि अगली बार चलने वाली खोज एक कैलेंडर मिनट पर विचार करती है, न कि दो अलग-अलग ट्रिगर पर। कैलेंडर के साथ संघ का आकार बदलता है लेकिन तर्क में नहीं।
आप समय क्षेत्र चुनकर और अगले पांच रन पढ़कर उस संघ का निरीक्षण कर सकते हैं। पूर्वावलोकन सख्ती से वर्तमान क्षण के बाद शुरू होता है और महीने, दिन और समय फ़ील्ड को लागू करते हुए कैलेंडर तिथियों की खोज करता है। यह आलेख गद्य में किसी विशिष्ट महीने का वादा नहीं करता है क्योंकि लाइव सूची इस पर निर्भर करती है कि पाठक कब और कहाँ जाँच करता है।
AND-शैली प्रथम-सोमवार कमांड वर्कअराउंड इस शेड्यूल जनरेटर के बाहर हैं
योजना ने AND व्यवहार प्राप्त करने के लिए शेल दिनांक परीक्षण को एम्बेड करने का सुझाव दिया। ToolAcre ऐसे कमांड को सत्यापित नहीं कर सकता: यह केवल पांच शेड्यूल फ़ील्ड को स्वीकार करता है, और इसकी कॉपी की गई पूरी लाइन में एक प्लेसहोल्डर निष्पादन योग्य होता है। शेल सिंटैक्स, प्रतिशत एस्केपिंग, कमांड उपलब्धता और निकास व्यवहार सभी उस वातावरण से संबंधित हैं जो अंततः कार्य चलाता है।
इस जनरेटर के भीतर, सुरक्षित डिज़ाइन चाल एक दिन के फ़ील्ड को `*` के रूप में छोड़ना है जब तक कि OR यूनियन का वास्तव में इरादा न हो। पहले-सोमवार की आवश्यकता के लिए, दस्तावेज़ करें कि पाँच-फ़ील्ड क्रोन अकेले इस बोली में प्रतिच्छेदन को व्यक्त नहीं करता है। किसी गैर-निष्पादित स्निपेट को गारंटी के रूप में प्रस्तुत करने के बजाय एक पर्यावरण-विशिष्ट समाधान को अलग से चुनें और उसका परीक्षण करें।
अन्य शेड्यूलर ऑपरेटरों की व्याख्या इस पाँच-फ़ील्ड पार्सर द्वारा नहीं की जाती है
कुछ शेड्यूलर व्याकरण `#`, `L`, `W` या `?` जैसे ऑपरेटरों को उजागर करते हैं, लेकिन यह पार्सर उनमें से किसी को भी स्वीकार नहीं करता है। यह छह फ़ील्ड को भी अस्वीकार करता है और बताता है कि इसका अनुबंध पांच-फ़ील्ड क्रॉस्टैब सिंटैक्स है। इसलिए एक अभिव्यक्ति जो किसी अन्य उत्पाद में काम करती है उसे साक्ष्य के रूप में यहां चिपकाया नहीं जा सकता है कि वही कैलेंडर नियम मौजूद है।
बोली का अनुवाद स्रोत और लक्ष्य व्याकरण की पहचान से शुरू होता है, सत्यापन सफल होने तक विराम चिह्न को हटाने से नहीं। ToolAcre लक्ष्य के पांच सामान्य फ़ील्ड, नाम, श्रेणियां, सूचियां और चरण बनाने में सहायता कर सकता है। यह एक असमर्थित ऑपरेटर द्वारा किए गए शब्दार्थ को संरक्षित नहीं कर सकता है, और लेख जानबूझकर उन विदेशी ऑपरेटरों का वर्णन करने से बचते हैं जैसे कि उन्हें लागू किया गया था।
कमांड से बचना केवल अभिव्यक्ति व्याकरण से बाहर है
प्रतिशत चिह्न और कमांड उद्धरण शेड्यूल के बाद दिखाई देते हैं और `parseCron` के बाहर होते हैं। पार्सर एक अभिव्यक्ति को ठीक पाँच रिक्त स्थान से अलग किए गए भागों में विभाजित करता है; यह कभी भी शेल पाइपलाइन, डेट कमांड या एस्केप्ड कमांड पेलोड को नहीं पढ़ता है। परिणामस्वरूप, यह आलेख प्रतिशत-चिह्न समाधान नहीं सिखाता, भले ही कार्यपुस्तिका में इसका प्रस्ताव दिया गया हो।
वह चूक एक सही निर्णय है. एक शेड्यूल टूल का अर्थ यह नहीं होना चाहिए कि एक कमांड सुरक्षित है क्योंकि इसके टाइमिंग फ़ील्ड मान्य हैं। हानिरहित इनपुट और अवलोकन योग्य आउटपुट के साथ वास्तविक Cron कार्यान्वयन और शेल में कमांड सिंटैक्स की समीक्षा करें। जनरेटर के परिणाम को उस कैलेंडर नियम के दायरे में रखें जिसे वह स्पष्ट रूप से समझता है।
टेकअवे: एक दिन के क्षेत्र को प्रतिबंधित करें, दोनों को नहीं - और जनरेटर का स्पष्टीकरण लाइन को सहेजने से पहले OR को दृश्यमान बनाता है
जब दोनों दिन के फ़ील्ड प्रतिबंधित हों, तो उन्हें एक संघ के रूप में पढ़ें और ज़ोर से "या" कहें। इससे भी बेहतर, जनरेटर की चेतावनी और आगामी रन का निरीक्षण करें। यदि वे तिथियां इच्छित सेट से अधिक हो जाती हैं, तो एक फ़ील्ड को `*` पर लौटाएं और लक्ष्य वातावरण द्वारा प्रलेखित तंत्र के साथ किसी भी अधिक विशिष्ट आवश्यकता को हल करें।
मुख्य सबक यह नहीं है कि क्रोन रहस्यमय है; यह है कि दो आसन्न स्तंभ अन्य प्रतिबंधों की तरह संयोजित नहीं होते हैं। ToolAcre पार्सिंग, विवरण और पूर्वावलोकन तर्क में उस अपवाद को केंद्रीकृत करता है। किसी अभिव्यक्ति के ब्राउज़र छोड़ने और परिचालन शेड्यूल बनने से पहले बेमेल को पकड़ने के लिए उन तीन दृश्यों का उपयोग करें।