Cron expression कैसे पढ़ें, फ़ील्ड दर फ़ील्ड
Cron expression एक छोटी-सी टेक्स्ट लाइन है, जो बताती है कि कोई जॉब कब चलाना है। आम तौर पर इसमें स्पेस से अलग किए पाँच फ़ील्ड होते हैं: मिनट, घंटा, महीने की तारीख़, महीना और हफ़्ते का दिन। लाइन 0 9 * * 1-5 का मतलब है सोमवार से शुक्रवार, सुबह 09:00 बजे। हर फ़ील्ड एक नंबर, नाम, लिस्ट, रेंज या स्टेप होता है, या हर वैल्यू के लिए *, और जॉब उन सभी समयों पर चलता है जहाँ सभी फ़ील्ड मेल खाते हैं।
पाँच फ़ील्ड
| फ़ील्ड | मान्य वैल्यू | उदाहरण |
|---|---|---|
| मिनट | 0 से 59 | 30 घंटे का 30वाँ मिनट है |
| घंटा | 0 से 23 | 9 यानी 24-घंटे की घड़ी में 09:00 |
| महीने की तारीख़ | 1 से 31 | 15 यानी 15 तारीख़ |
| महीना | 1 से 12, या JAN से DEC | 3 या MAR यानी मार्च |
| हफ़्ते का दिन | 0 से 6, या SUN से SAT | 0 या SUN यानी रविवार, 1 यानी सोमवार |
कुछ सिस्टम रविवार के लिए 7 भी मानते हैं, पर सभी नहीं मानते, इसलिए 0 या SUN इस्तेमाल करें। इस रूप में cron में सेकंड का फ़ील्ड नहीं होता, इसलिए सबसे छोटा स्टेप एक मिनट है।
लिस्ट, रेंज, स्टेप और नाम
का मतलब है फ़ील्ड की हर वैल्यू।* * * *हर मिनट चलता है।- लिस्ट में कॉमा इस्तेमाल होता है।
0 9,17 * * *हर दिन 09:00 और 17:00 बजे चलता है। - रेंज में हाइफ़न इस्तेमाल होता है। हफ़्ते के दिन वाले फ़ील्ड में
1-5का मतलब है सोमवार से शुक्रवार। - स्टेप में स्लैश इस्तेमाल होता है। मिनट वाले फ़ील्ड में
*/15का मतलब है 0, 15, 30 और 45।10-30/5का मतलब है 10, 15, 20, 25 और 30। - नाम, जैसे
MON-FRI, नंबरों की जगह ले सकते हैं। अगर आपका शेड्यूलर इन्हें स्वीकार करता है, तो इन्हें पढ़ना आसान होता है।
ये हिस्से मिलकर इस्तेमाल हो सकते हैं। 0 8-18/2 * * * 08:00 से 18:00 तक, हर दूसरे घंटे के मिनट 0 पर चलता है।
आम शेड्यूल
| एक्सप्रेशन | मतलब |
|---|---|
* * * * * | हर मिनट |
/15 * * * | हर 15 मिनट |
0 * * * * | हर घंटे के मिनट 0 पर |
0 2 * * * | हर दिन 02:00 बजे |
0 9 * * 1-5 | सोमवार से शुक्रवार, 09:00 बजे |
0 9,17 * * * | हर दिन 09:00 और 17:00 बजे |
30 6 1 * * | हर महीने की 1 तारीख़ को 06:30 बजे |
0 0 * * 0 | हर रविवार आधी रात |
0 0 1 1 * | 1 जनवरी की आधी रात |
/5 9-17 * 1-5 | सोमवार से शुक्रवार, 09:00 से 17:55 तक हर 5 मिनट |
ध्यान दें कि 0 0 * * आधी रात है, और 0 12 * * दोपहर 12 बजे है। घंटे को गलत लिखना सबसे आम गलतियों में से एक है।
महीने की तारीख़ और हफ़्ते का दिन
जब महीने की तारीख़ वाला और हफ़्ते के दिन वाला, दोनों फ़ील्ड सीमित हों, तो जॉब तब चलता है जब इनमें से कोई भी एक मेल खाए। यह Vixie cron और उससे निकले कई सिस्टमों का पारंपरिक नियम है। इसलिए 0 0 13 * 5 हर महीने की 13 तारीख़ को आधी रात और हर शुक्रवार को भी चलता है। लोग अक्सर सोचते हैं कि सिर्फ़ शुक्रवार वाली 13 तारीख़ को चलेगा, और इसलिए योजना से ज़्यादा रन हो जाते हैं।
अगर दोनों में से एक फ़ील्ड * है, तो सिर्फ़ दूसरा फ़ील्ड गिना जाता है। शुक्रवार वाली 13 तारीख़ को चलाने के लिए हर शुक्रवार का जॉब शेड्यूल करें और स्क्रिप्ट के अंदर तारीख़ जाँचें। दूसरे शेड्यूलर, जिनमें कुछ क्लाउड सेवाएँ भी शामिल हैं, अलग नियम इस्तेमाल कर सकते हैं, इसलिए उनका दस्तावेज़ ज़रूर पढ़ें।
टाइम ज़ोन और डेलाइट सेविंग
Cron उस मशीन या सेवा की घड़ी से चलता है, जिस पर वह चलती है, और आम तौर पर वह उस मशीन का लोकल टाइम ज़ोन होता है। 02:30 के लिए सेट किया गया जॉब उस घड़ी पर 02:30 बजे चलता है। पहले ज़ोन जाँच लें (Linux पर date यह दिखाता है)। अगर आप चाहते हैं कि जॉब हर जगह एक ही घड़ी के हिसाब से चलें, तो कई टीमें सर्वर UTC पर चलाती हैं, और कुछ शेड्यूलर हर जॉब के लिए टाइम ज़ोन सेट करने देते हैं।
डेलाइट सेविंग साल में दो बार घड़ी बदलती है। वसंत में, कई जगहों पर 02:00 से सीधे 03:00 हो जाते हैं, इसलिए 02:30 वाले जॉब के लिए चलने का समय ही नहीं बचता। शरद ऋतु में 01:00 से 01:59 तक का घंटा दो बार आता है। शेड्यूलर इन मामलों को अलग-अलग तरीकों से संभालते हैं। कुछ जॉब छोड़ देते हैं, कुछ एक बार चलाते हैं, और कुछ दो बार चलाते हैं। अगर यह फ़र्क आपके लिए मायने रखता है, तो जॉब को सुबह के शुरुआती बदलाव वाले समय से बाहर रखें, या UTC इस्तेमाल करें।
छह फ़ील्ड और Quartz
कुछ शेड्यूलर शुरुआत में सेकंड का फ़ील्ड जोड़ते हैं, इसलिए /10 * * * * हर 10 सेकंड पर चलता है। Java के लिए Quartz शेड्यूलर सेकंड, मिनट, घंटा, महीने की तारीख़, महीना, हफ़्ते का दिन और वैकल्पिक साल इस्तेमाल करता है, और इसमें चार खास चिन्ह भी जुड़े होते हैं:
?का मतलब है "कोई खास वैल्यू नहीं"। Quartz को इसकी ज़रूरत महीने की तारीख़ या हफ़्ते के दिन वाले फ़ील्ड में से उसमें होती है जिसे आप सेट नहीं करते।Lका मतलब है आख़िरी। महीने की तारीख़ वाले फ़ील्ड मेंLमहीने का आख़िरी दिन है, और हफ़्ते के दिन वाले फ़ील्ड में6Lआख़िरी शुक्रवार है।Wका मतलब है सबसे नज़दीकी कार्यदिवस।15W15 तारीख़ के सबसे नज़दीकी कार्यदिवस को दर्शाता है, और यह किसी दूसरे महीने में नहीं जाता।#का मतलब है n-वाँ दिन।6#3तीसरा शुक्रवार है।
Quartz दिनों को पाँच-फ़ील्ड वाले रूप से अलग नंबर देता है। इसमें 1 रविवार है और 7 शनिवार, इसलिए सोमवार से शुक्रवार 1-5 नहीं, 2-6 है। कोई लाइन कॉपी करने से पहले हमेशा जाँच लें कि आपका शेड्यूलर किस फ़ॉर्मेट का इस्तेमाल करता है।
आम गलतियाँ
- मिनट वाले फ़ील्ड में
*/7। वैल्यू 0, 7, 14 और इसी तरह 56 तक जाती हैं। अगला 63 होता, जो मौजूद नहीं है, इसलिए 56 के बाद का रन अगले घंटे के मिनट 0 पर होता है। बीच का अंतर सिर्फ़ चार मिनट का रह जाता है, और अंतराल बराबर नहीं रहता। ऐसा स्टेप इस्तेमाल करें जो 60 को बराबर-बराबर बाँटे, जैसे 5, 10, 15 या 30। - 30 फ़रवरी। ऐसी कोई तारीख़ नहीं होती, इसलिए
0 0 30 2 *कभी नहीं चलता। यही बात उस महीने की 31 तारीख़ पर लागू होती है जिसमें 30 दिन हों। "कोई एक" वाले नियम के तहत, हफ़्ते के दिन की पाबंदी फिर भी दूसरे दिनों पर रन करा सकती है, इसलिए नतीजा ज़रूर जाँचें। - घंटा 24 या मिनट 60। ये सीमा से बाहर हैं। ज़्यादातर शेड्यूलर इन्हें सेव करते समय ठुकरा देते हैं, पर सभी नहीं।
- सेकंड की उम्मीद। पाँच-फ़ील्ड वाली लाइन सिर्फ़ पूरे मिनटों पर चलती है।
- Cron को रेगुलर एक्सप्रेशन समझ लेना। Cron में
का मतलब है हर वैल्यू। रेगुलर एक्सप्रेशन मेंका मतलब है उससे पहले वाले आइटम को दोहराना। पैटर्न के लिए रेगेक्स टेस्टर इस्तेमाल करें, और cron की लाइनों को अलग रखें।
अगले रन जाँचें
किसी शेड्यूल पर भरोसा करने से पहले लाइन को सादे शब्दों में पढ़ें, और उसके आने वाले कुछ रन के समय लिख लें। Cron expression समझाएँ ये दोनों काम करता है, और "कोई एक" वाला नियम या कोई अजीब स्टेप पकड़ने का यह सबसे तेज़ तरीका है।
त्वरित जवाब
पहला फ़ील्ड मिनट है या सेकंड?
मानक पाँच-फ़ील्ड वाले रूप में मिनट। सिर्फ़ कुछ छह-फ़ील्ड वाले शेड्यूलर सेकंड जोड़ते हैं, और वे उन्हें सबसे पहले रखते हैं।
मेरा जॉब शुक्रवार को और 13 तारीख़ को भी क्यों चलता है?
महीने की तारीख़ और हफ़्ते के दिन, दोनों फ़ील्ड सेट हैं, इसलिए जॉब तब चलता है जब इनमें से कोई एक मेल खाए। अगर आप सिर्फ़ दूसरा चाहते हैं, तो एक फ़ील्ड को * कर दें।
क्या cron UTC इस्तेमाल करता है?
सिर्फ़ तभी जब मशीन या सेवा UTC पर सेट हो। नहीं तो वह उस सिस्टम का लोकल टाइम ज़ोन इस्तेमाल करता है।
अंग्रेज़ी मूल से AI की मदद से अनुवादित।
टिप्पणियाँ
अभी कोई टिप्पणी नहीं। पहली टिप्पणी आप करें।


