Cron एक्सप्रेशन समझें
crontab का शेड्यूल सरल भाषा में पढ़ें और देखें कि वह अगली बार किस-किस समय चलेगा, किसी भी टाइम ज़ोन में।
पूरी तरह आपके ब्राउज़र में चलता है
- मिनट
- घंटा
- महीने का दिन
- महीना
- सप्ताह का दिन
अगले रन
मानक पाँच-फ़ील्ड cron (मिनट, घंटा, महीने का दिन, महीना, सप्ताह का दिन), जैसा Vixie cron, cronie और ज़्यादातर Linux सिस्टम में चलता है, साथ में @daily जैसे शॉर्टकट। Quartz और सेकंड वाले दूसरे फ़ॉर्मैट पहचाने जाते हैं पर समझाए नहीं जाते।
Cron एक्सप्रेशन कैसे जाँचें
- शेड्यूल के पाँच फ़ील्ड लिखें या पेस्ट करें, जैसे
*/15 9-17 * * 1-5, या कोई उदाहरण चुनें। पूरी crontab लाइन भी चलती है; पाँचवें फ़ील्ड के बाद की कमांड अनदेखी की जाती है। - सरल भाषा का सार और हर फ़ील्ड का ब्योरा पढ़ें। गलती उसी फ़ील्ड में बताई जाती है जहाँ वह होती है।
- अगले रन के समय की सूची देखें। वह टाइम ज़ोन चुनें जिसमें सर्वर चलता है, और आगे देखना हो तो अलग शुरुआती समय चुनें।
Cron शेड्यूल पढ़ना
Cron अपनी तालिका हर मिनट एक बार जाँचता है और हर उस जॉब को चलाता है जिसके पाँचों फ़ील्ड मौजूदा समय से मेल खाते हों, सिर्फ़ दो दिन-वाले फ़ील्ड के एक अपवाद के साथ, जिसका ज़िक्र नीचे है। तो */15 9-17 * * 1-5 का मतलब है: मिनट 0, 15, 30 और 45 पर, घंटे 9 से 17 में, महीने के किसी भी दिन, किसी भी महीने में, सोमवार से शुक्रवार। दिन का आख़िरी रन 17:45 पर होता है, क्योंकि घंटे वाला फ़ील्ड पूरे 17वें घंटे को कवर करता है।
यह टूल हर फ़ील्ड को उसी तरह पार्स करता है जैसे Vixie cron और cronie करते हैं, जो ज़्यादातर Linux डिस्ट्रीब्यूशन में आते हैं। महीनों और सप्ताह के दिनों के नाम किसी भी केस में चलते हैं और 7 रविवार माना जाता है। किसी अकेली संख्या के बाद का स्टेप, जैसे 5/10, 5-59/10 की तरह पढ़ा जाता है जैसे कई cron संस्करण पढ़ते हैं; कुछ पुराने उसे ठुकरा देते हैं, इसलिए टूल याद दिलाता है कि रेंज पूरी लिखें। रेंज छोटे से बड़े की ओर होनी चाहिए: FRI-MON को घुमाने की जगह चिह्नित किया जाता है, क्योंकि मानक cron रेंज को घुमाता नहीं।
अगले रन के समय आपकी चुनी टाइम ज़ोन में कैलेंडर पर आगे बढ़कर निकाले जाते हैं, इसलिए जो एक्सप्रेशन सिर्फ़ 29 फ़रवरी पर मेल खा सकता है, वह अगला लीप ईयर तुरंत ढूँढ लेता है, और जो कभी मेल नहीं खा सकता, जैसे 0 0 31 2 *, उसके बारे में बताया जाता है कि वह कभी नहीं चलेगा।
सुझाव
- लॉग में दिखे रन के समय को Unix टाइमस्टैम्प में, या वापस, Unix टाइमस्टैम्प कन्वर्टर से बदलें।
- जॉब अपने लॉग को छानने के लिए जो पैटर्न इस्तेमाल करता है उसे जाँचना है? Regex टेस्टर आज़माएं।
- शेड्यूल वाले JSON कॉन्फ़िग का रूप JSON फ़ॉर्मैट और वैलिडेट करें से देखें।
अक्सर पूछे जाने वाले सवाल
पाँच फ़ील्ड का क्या मतलब है?
क्रम से: मिनट (0-59), घंटा (0-23), महीने का दिन (1-31), महीना (1-12 या JAN-DEC) और सप्ताह का दिन (0-7 या SUN-SAT, जहाँ 0 और 7 दोनों रविवार हैं)। हर फ़ील्ड में एक अकेला मान, 1,15 जैसी सूची, 9-17 जैसी रेंज, */15 या 0-30/10 जैसा स्टेप, या हर मान के लिए * आ सकता है।
मेरा जॉब उम्मीद से ज़्यादा दिनों पर क्यों चल रहा है?
जब महीने का दिन और सप्ताह का दिन, दोनों फ़ील्ड सीमित हों, तो cron उन दिनों चलता है जो उनमें से किसी एक से मेल खाएँ, दोनों से नहीं। 0 9 1 * 1 हर महीने की 1 तारीख़ को और हर सोमवार को चलता है। Vixie cron और cronie ऐसे ही चलते हैं। इसी नियम की एक सनक: जो फ़ील्ड * से शुरू होता है, जैसे */2, वह असीमित माना जाता है, तब दोनों फ़ील्ड का मेल खाना ज़रूरी होता है।
cron कौन-सा टाइम ज़ोन इस्तेमाल करता है?
उस मशीन या कंटेनर का टाइम ज़ोन जिस पर वह चलता है, जब तक crontab में CRON_TZ या TZ न लगा हो। कई सर्वर UTC पर चलते हैं, इसलिए यहाँ दिखे समय पर भरोसा करने से पहले यह जाँच लें। सर्वर का ज़ोन सूची में चुनें ताकि उसके रन के समय दिखें।
डेलाइट सेविंग के लिए घड़ियाँ बदलने पर क्या होता है?
सूची आपके चुने ज़ोन की घड़ी के हिसाब से चलती है: घड़ियाँ आगे बढ़ने पर जो समय छूट जाता है वह सूची में नहीं आता, और घड़ियाँ पीछे जाने पर जो समय दो बार आता है वह एक बार सूचीबद्ध होता है। Vixie cron और cronie छूटे हुए घंटे में तय जॉब को बदलाव के जल्द बाद चलाते हैं और दोहराए गए घंटे में जॉब दोहराते नहीं; दूसरे शेड्यूलर अलग हो सकते हैं। जब सूचीबद्ध अवधि में कोई बदलाव आता है तो एक नोट दिखता है।
क्या यह सेकंड या Quartz सिंटैक्स सँभालता है?
नहीं। छह या सात फ़ील्ड वाले, या ?, L, W या # वाले एक्सप्रेशन Quartz, Spring और ऐसे ही शेड्यूलर से आते हैं, जहाँ पहला फ़ील्ड सेकंड का होता है। टूल अंदाज़ा लगाने की जगह यह बता देता है, क्योंकि उन्हें मानक cron की तरह पढ़ने से गलत शेड्यूल निकलेगा।
@daily, @hourly और बाकी शॉर्टकट का क्या मतलब है?
@hourly यानी 0 * * * *, @daily और @midnight यानी 0 0 * * *, @weekly यानी 0 0 * * 0, @monthly यानी 0 0 1 * *, और @yearly व @annually यानी 0 0 1 1 *। @reboot cron सेवा शुरू होने पर एक बार चलता है, इसलिए उसके सूचीबद्ध करने लायक कोई समय नहीं होते।