Cron व्यंजक निर्माता
रूपांतरणcron व्यंजकों को बनाता, मान्य करता और समझाता है। अगला ट्रिगर समय (UTC) गणना करता है।
- अगला चलना (UTC)
- —
- कॉपी
- —
इस पृष्ठ पर
cron व्यंजक क्या है?#
cron व्यंजक पाँच रिक्ति-पृथक फ़ील्ड में लिखा गया एक सघन कार्यक्रम है: minute hour day-of-month month day-of-week। 0 9 * * 1-5 जैसी पंक्ति बाएँ से दाएँ पढ़ी जाती है — “मिनट 0, घंटा 9, हर day-of-month, हर month, दिन 1 से 5 (सोमवार–शुक्रवार) पर” अर्थात् कार्यदिवसों में 09:00। हर * का अर्थ “इस फ़ील्ड का हर मान” है, इसलिए जितने अधिक फ़ील्ड आप नियत करते हैं, कार्यक्रम उतना ही विशिष्ट होता है; और जितने अधिक फ़ील्ड आप * छोड़ते हैं, यह उतनी ही बार चलता है।
cron, Linux crontab, GitHub Actions, Kubernetes CronJob, अधिकांश CI सिस्टम और असंख्य कार्य शेड्यूलर की मूल शेड्यूलिंग भाषा है। इसे सही लिखना आधी लड़ाई है; दूसरी आधी लड़ाई day-of-month / day-of-week की विशेषता है (नीचे FAQ देखें) जो अनुभवी इंजीनियरों को भी लचीत कर देती है। यह पेज आपके पाँच फ़ील्ड को टाइप करते ही पार्स करता है, सिंटैक्स या श्रेणी त्रुटि वाले सटीक फ़ील्ड को चिह्नित करता है, और अगला चलना की गणना करता है ताकि आप पुष्टि कर सकें कि कार्यक्रम वास्तव में तब चलता है जब आप सोचते हैं।
इसका उपयोग कैसे करें#
- शीर्ष पर व्यंजक बॉक्स संपादित करें। यह
* * * * *(हर मिनट) पर आरंभ होता है। - इसके नीचे पाँच ड्रॉपडाउन हैं — प्रति फ़ील्ड एक (मिनट, घंटा, महीने का दिन, महीना, सप्ताह का दिन)। प्रत्येक उस फ़ील्ड के सामान्य टुकड़े देता है (
*,*/5,0,1-5,0,6…); किसी एक को चुनने पर वह व्यंजक की संगत स्थिति में आ जाता है, जो तब काम आता है जब आपको याद न हो कि*/15मिनट स्लॉट में है या नहीं। - पूर्व-निर्धारित पंक्ति एक क्लिक में पूर्ण आरंभिक कार्यक्रम भर देती है: हर मिनट, हर घंटा, दैनिक, साप्ताहिक, मासिक, वार्षिक, कार्यदिवस।
- आउटपुट पैनल अगला चलना (UTC) (वर्तमान समय पर या उसके बाद पहला क्षण जो मेल खाता है) और एक स्थिति पंक्ति दिखाता है जो या तो मान्य पार्स की पुष्टि करती है या दोषपूर्ण फ़ील्ड को नाम देती है। वर्तमान क्षण के विरुद्ध पुनः गणना के लिए now() दबाएँ।
मुख्य विशेषताएँ#
- पूर्ण पाँच-फ़ील्ड व्याकरण।
*, कॉमा सूची (0,15,30,45), श्रेणियाँ (1-5), चरण (*/15,9-17/2), और महीना/दिन नाम (JAN-DEC,SUN-SAT, केस-असंवेदनशील) का समर्थन। रविवार के लिए7स्वीकार्य है और इसे0पर नॉर्मलाइज़ किया जाता है। - सही day-of-month/day-of-week तर्क। मानक Vixie-cron नियम लागू: जब दोनों फ़ील्ड प्रतिबंधित हों, तब कार्य चलता है यदि कोई एक मेल खाए (लॉजिकल OR); जब केवल एक प्रतिबंधित हो, तब दोनों को मेल खाना चाहिए (AND)। कई साधारण कैलकुलेटर इसे गलत करते हैं।
- फ़ील्ड-सटीक त्रुटियाँ। कोई खराब श्रेणी या अतिरिक्त अक्षर सटीक दोषी फ़ील्ड (
minute,hour…) के साथ रिपोर्ट किया जाता है, सामान्य “अमान्य व्यंजक” नहीं। - UTC-आधारित अगला-चलना। अगला ट्रिगर क्षण के UTC घटकों पर गणना की जाती है, इसलिए परिणाम पेज जहाँ लोड हो रहा है उससे स्वतंत्र रूप से निर्धारित है, फिर एक सामान्य तिथि के रूप में रेंडर होता है जिसे आप कॉपी कर सकते हैं।
- अप्राप्यता रक्षक। ऐसा व्यंजक जो कभी मेल न खा सके (उदाहरण के लिए day-of-month जो किसी महीने में न हो) का पता लगाया जाता है, बजाय अनंत लूप के।
विस्तृत उदाहरण#
कार्यदिवस स्टैंडअप के लिए 0 9 * * 1-5 टाइप करें। फ़ील्ड-दर-फ़ील्ड: मिनट 0, घंटा 9, day-of-month *, month *, day-of-week 1-5। date फ़ील्ड (*) और weekday फ़ील्ड (1-5) दोनों सीमित हैं, किंतु केवल weekday है — date तो वाइल्डकार्ड है — इसलिए AND पथ लागू होता है: सोमवार से शुक्रवार वाले दिनों में 09:00 पर चलाएँ। अगला चलना अगला आने वाला कार्यदिवस 09:00 UTC क्षण दिखाता है।
अब 0 0 1 * 1 से तुलना करें — “मिनट 0, घंटा 0, महीने का पहला दिन, हर महीना, सोमवार”। यहाँ दोनों day-of-month (1) और day-of-week (1) प्रतिबंधित हैं, इसलिए cron का OR पथ लेता है: कार्य हर महीने के पहले दिन और हर सोमवार को चलता है — “केवल वे सोमवार जो पहली तारीख को पड़ते हैं” नहीं, जो लगभग सर्वव्यापी गलत पठन है। अगला चलना पैनल यह अंतर दृश्य बनाता है: आप देखेंगे कि यह निकटतम सोमवार तक चला जाता है, तब भी जब वह सोमवार पहली तारीख न हो।
अक्सर पूछे जाने वाले प्रश्न#
मेरा कार्य अपेक्षित न होने वाले दिनों में क्यों चलता है?#
लगभग हमेशा day-of-month/day-of-week परस्पर क्रिया के कारण। मानक cron दोनों नियत होने पर उन्हें OR मानता है: 0 0 1 * 1 का अर्थ “पहली तारीख, या कोई भी सोमवार” है, न कि “पहली तारीख केवल यदि वह सोमवार हो”। यदि आप ऐसा कार्य चाहते हैं जो केवल तब चले जब पहली तारीख वास्तव में सोमवार हो, तो cron स्वयं इसे व्यक्त नहीं कर सकता — आप पहली तारीख शेड्यूल करें और स्क्रिप्ट के भीतर एक weekday जाँच जोड़ें।
*/5 और 9-17/2 का क्या मतलब है?#
मिनट फ़ील्ड में */5 का अर्थ है “0 से शुरू, हर पाँचवाँ मान” → 0, 5, 10, 15, …, 55। 9-17/2 का अर्थ है “9 से 17 की श्रेणी में, हर दूसरा मान” → 9, 11, 13, 15, 17 — “कार्य घंटों में हर दो घंटे” के लिए उपयोगी। / के बाद का चरण-भाजक उस श्रेणी या वाइल्डकार्ड पर लागू होता है जो इससे पहले है।
रविवार 0 है या 7?#
दोनों। day-of-week फ़ील्ड रविवार के लिए 0 और 7 दोनों स्वीकार करता है (cron ऐतिहासिक रूप से 0 उपयोग करता था; कुछ सिस्टम ने 7 जोड़ा)। यह टूल किसी भी को लेता है और 7 को 0 पर नॉर्मलाइज़ करता है। नाम भी काम करते हैं: SUN, Mon, fri सभी केस-असंवेदनशील हैं।
व्यंजक पार्स हो जाता है किंतु अगला चलना बहुत दूर दिखता है। क्या यह गलत है?#
संभवतः नहीं — इसका सामान्यतः अर्थ है कि कार्यक्रम वास्तव में जल्दी नहीं चल सकता। 0 0 29 2 * (फ़रवरी 29) मान्य है किंतु केवल लीप वर्ष में मेल खाता है, इसलिए अगला चलना वर्षों दूर हो सकता है। टूल अपनी खोज को लगभग आठ वर्षों तक सीमित रखता है; ऐसा व्यंजक जो उस खिड़की में मेल न खा सके, अप्राप्य के रूप में रिपोर्ट किया जाता है, बजाय पेज को लटकाए रखने के।