Cron अभिव्यक्ति जनरेटर
cron जॉब शेड्यूल्स को दृश्य रूप से बनाएँ और समझें।
त्वरित प्रीसेट
अगले 5 चालन
cron सिंटैक्स संदर्भ
* · कोई भी मान
*/5 · प्रत्येक 5 इकाई
1,15 · मानों 1 और 15 पर
1-5 · 1 से 5 तक की सीमा
फ़ील्ड: मिनट (0-59), घंटा (0-23), महीने का दिन (1-31), महीना (1-12), सप्ताह का दिन (0-6, 0=रविवार)
cron अभिव्यक्ति का संक्षिप्त इतिहास
पाँच-फील्ड cron अभिव्यक्ति मई 1975 से है, जब एक प्रारंभिक संस्करण Research Unix संस्करण 7 के हिस्से के रूप में AT&T Bell Laboratories से जारी किया गया। नाम Chronos, समय के ग्रीक मूर्तिकरण की ओर इशारा करता है। प्रारूप सरल था: /usr/lib/crontab में एक पंक्ति पर पाँच श्वेत-स्पेस-पृथक्कृत फ़ील्ड (मिनट, घंटा, माह-का-दिन, माह, सप्ताह-का-दिन)। Paul Vixie ने 1987 में की Vixie cron पुनर्लेखन वास्तविक आधुनिक कार्यान्वयन बन गई; हर प्रमुख Linux वितरण एक Vixie-व्युत्पन्न cron भेजता है, और Vixie ने प्रति-उपयोगकर्ता crontab, पर्यावरण-चर समर्थन (MAILTO=, CRON_TZ=) और @hourly / @daily / @reboot शॉर्टकट मैक्रोज़ जोड़े जिन्हें आज हर कोई उपयोग करता है। cron-अभिव्यक्ति वाक्यविन्यास फिर दो रास्तों पर शाखाओं में बँट गई। Quartz Scheduler (Java, James House, 1998; Apache और Terracotta को दान किया गया) ने एक अग्रणी सेकंड फ़ील्ड, एक वैकल्पिक पिछला वर्ष फ़ील्ड, और L (अंतिम) / W (कार्य दिवस) / # (nवीं घटना) ऑपरेटर जोड़े, छह-फील्ड cron का उत्पादन किया जिसे AWS EventBridge (मूल रूप से CloudWatch Events, 2014) और Spring की @Scheduled एनोटेशन ने बाद में अपनाया। Azure Functions (2016) द्वारा उपयोग किया गया NCronTab प्रारूप सेकंड को पहले रखता है लेकिन पाँच व्यवहारिक फ़ील्ड रखता है। क्लाउड युग ने फिर पाँच-फील्ड Vixie प्रारूप को सामान्य भाषा के रूप में मानकीकृत किया: Kubernetes CronJobs (2016 में alpha 1.4, 2021 में GA 1.21) ठीक पाँच फ़ील्ड स्वीकार करते हैं, जैसे GitHub Actions (on.schedule.cron, 2019), GCP Cloud Scheduler (2018), और Vercel Cron Jobs (2022)। दृश्य cron निर्माता, इस उपकरण की श्रेणी, लगभग 2010-2015 में उभरे: crontab.guru (Christine Dodrill, 2014) सबसे अधिक उद्धृत संदर्भ बन गया, और cron-descriptor लाइब्रेरी (Brady Holt, मूल रूप से .NET, Java/Python/JS में पोर्ट की गई) ने अधिकांश «सरल अंग्रेज़ी में cron» अनुवाद परतों को संचालित किया जिन पर डिकोडर और जनरेटर निर्भर करते हैं। Bell Labs के आधे शताब्दी बाद, वही पाँच फ़ील्ड अभी भी दुनिया के रात्रिकालीन बैकअप शेड्यूल कर रहे हैं।
एक cron अभिव्यक्ति की संरचना
- पाँच फ़ील्ड, श्वेत-स्पेस से पृथक। क्रम में:
मिनट (0-59) घंटा (0-23) माह-का-दिन (1-31) माह (1-12) सप्ताह-का-दिन (0-6)। अभिव्यक्ति0 9 * * 1का अर्थ है «मिनट 0, घंटा 9, कोई भी माह-का-दिन, कोई भी माह, सप्ताह-का-दिन 1 (सोमवार)», यानी हर सोमवार सुबह 9:00 बजे। माह 1-अनुक्रमित है;0 0 1 0 *अमान्य है क्योंकि कोई माह 0 नहीं है। - चार ऑपरेटर।
*फ़ील्ड की सीमा में हर मान से मेल खाता है।,असतत मानों की सूची देता है: मिनट फ़ील्ड में0,15,30,45।-एक श्रेणी परिभाषित करता है: घंटा फ़ील्ड में9-17सुबह 9 से शाम 5 तक कवर करता है।/एक चरण सेट करता है: मिनट में*/150, 15, 30, 45 पर ट्रिगर होता है। ये चार ऑपरेटर स्वतंत्र रूप से जुड़ते हैं:*/15 8-18 * * 1-5का अर्थ है «8 और 18 के बीच हर 15 मिनट, केवल कार्यदिवस»। - शॉर्टकट मैक्रोज़। Vixie cron और अधिकांश आधुनिक पार्सर
@yearly(या@annually,0 0 1 1 *के बराबर),@monthly(0 0 1 * *),@weekly(0 0 * * 0),@daily(या@midnight,0 0 * * *),@hourly(0 * * * *), और विशेष@reboot(cron डेमॉन शुरू होने पर एक बार चलाएँ) स्वीकार करते हैं। क्लाउड प्लेटफ़ॉर्म भिन्न हैं: GitHub Actions और Vercel मैक्रोज़ को अस्वीकार करते हैं। - चरण की चालाकी। सीमा a-b वाले फ़ील्ड में
*/Na, a+N, a+2N, ... पर ट्रिगर होता है, आवश्यक रूप से हर N इकाई दीवार घड़ी समय पर नहीं। मिनट फ़ील्ड में*/70, 7, 14, 21, 28, 35, 42, 49, 56 पर ट्रिगर होता है, फिर अगले घंटे के शीर्ष पर 0 पर वापस कूदता है, 4-मिनट का अंतर उत्पन्न करता है। मानक cron में बिना रैपर के सच्चा हर-7-मिनट शेड्यूलिंग असंभव है। - OR जाल (माह-का-दिन बनाम सप्ताह-का-दिन)। जब दोनों फ़ील्ड प्रतिबंधित हैं, मानक Unix cron किसी भी एक मिलान पर ट्रिगर होता है, दोनों पर नहीं।
0 0 1 * 1का अर्थ «1 तारीख पर पड़ने वाले सोमवार» नहीं है, इसका अर्थ है «महीने की हर 1 तारीख, साथ ही हर सोमवार»।crontab(5)मैन पेज स्पष्ट है। Quartz, AWS EventBridge, और systemd टाइमर सभी «पहला सोमवार» स्वच्छ रूप से व्यक्त करते हैं; Vixie cron को रैपर की आवश्यकता होती है। - सप्ताह-का-दिन क्रमांकन भिन्न होता है। Linux/Vixie, GitHub Actions, GCP Cloud Scheduler, Kubernetes, Azure NCronTab, और Spring 5.3+ सभी रविवार = 0 का उपयोग करते हैं (Vixie 7 भी स्वीकार करता है)। Quartz और AWS EventBridge रविवार = 1 का उपयोग करते हैं।
0 0 * * 1का अर्थ इसलिए Linux पर «हर सोमवार» है लेकिन Quartz के तहत «हर रविवार»। जब पोर्टेबिलिटी मायने रखती है तो तीन-अक्षर नामों (MON,TUE) का उपयोग करें।
अभिव्यक्ति कहाँ उपयोग होती है
- Linux / macOS cron। कमांड के बाद
crontab -eमें पेस्ट करें। नाम (MON,JAN) और शॉर्टकट मैक्रोज़ (@hourly,@daily,@reboot) स्वीकार किए जाते हैं। यदि सर्वर UTC में है लेकिन आप स्थानीय-समय शेड्यूलिंग चाहते हैं तो crontab के शीर्ष परCRON_TZ=America/New_Yorkसेट करें। - Kubernetes CronJob।
spec.scheduleको अपनी पाँच-फील्ड अभिव्यक्ति पर सेट करें।spec.timeZone(1.27 में GA, मार्च 2023) IANA क्षेत्र जैसे «Europe/Paris» लेता है। शेड्यूल स्ट्रिंग मेंTZ=एम्बेड करना 1.29 से अस्वीकार किया जाता है। आउटेज के बाद कैच-अप व्यवहार को नियंत्रित करने के लिएspec.startingDeadlineSecondsका उपयोग करें। - GitHub Actions।
on.schedule.cronमें डालें। शेड्यूल UTC में चलते हैं, सबसे छोटी ताल 5 मिनट है (कुछ भी बारीक चुपचाप गोल किया जाता है), और सार्वजनिक रिपॉजिटरी में निर्धारित वर्कफ़्लो रिपॉजिटरी निष्क्रियता के 60 दिनों के बाद स्वतः अक्षम हो जाते हैं। YAML के अंदर cron स्ट्रिंग्स को अग्रणी*के साथ पार्सर भ्रम से बचने के लिए उद्धृत किया जाना चाहिए। - AWS EventBridge / EventBridge Scheduler। छह फ़ील्ड का उपयोग करता है:
cron(min hr dom mon dow yr)। माह-का-दिन या सप्ताह-का-दिन (दोनों शाब्दिक नहीं) में से किसी एक में?की आवश्यकता है। Quartz-शैली ऑपरेटरL(अंतिम),W(कार्य दिवस), और#(nवीं घटना) सभी यहाँ काम करते हैं। Scheduler उत्पाद (2022) ने एक-शॉट टाइमर के लिए एक अलगat()अभिव्यक्ति जोड़ी। - GCP Cloud Scheduler। Linux से मेल खाने वाला पाँच-फील्ड वाक्यविन्यास।
timeZoneप्रॉपर्टी एक IANA क्षेत्र लेती है। Cloud Pub/Sub या HTTP लक्ष्यों के साथ मिलाएँ।retryConfigक्षणिक विफलताओं को संभालता है; डिफ़ॉल्ट कोई पुनः प्रयास नहीं है, जो उन इंजीनियरों को आश्चर्यचकित करता है जो कम-से-कम-एक-बार सिमेंटिक्स की अपेक्षा करते हैं। - Vercel Cron Jobs।
vercel.jsonमें पाँच-फील्ड वाक्यविन्यास। दोनों दिन फ़ील्ड एक साथ सेट नहीं किए जा सकते। Hobby योजनाएँ दैनिक पर ताल सीमा रखती हैं; Pro योजनाएँ प्रति घंटा अनुमति देती हैं। आपके फ़ंक्शन पथ पर HTTP GET ट्रिगर करता है, जिसका अर्थ है कि यदि ट्रिगर कभी पुनः प्रयास करता है तो फ़ंक्शन आदर्श होना चाहिए।
मानक, बोलियाँ, और मील के पत्थर
- AT&T Bell Labs cron (मई 1975)। मूल। पाँच फ़ील्ड, कोई प्रति-उपयोगकर्ता crontab नहीं,
/usr/lib/crontabसे चलता था। Research Unix संस्करण 7 का हिस्सा। श्वेत-स्पेस-पृथक्कृत व्याकरण जिसे सभी आधुनिक संस्करण विस्तारित करते हैं। - Vixie cron (Paul Vixie, 1987)। पुनर्लेखन जो हर कोई चलाता है। प्रति-उपयोगकर्ता crontabs,
@hourly/@daily/@rebootमैक्रोज़, नाम उपनाम (MON,JAN), औरMAILTO/CRON_TZपर्यावरण चर जोड़े। अधिकांश Linux वितरण Vixie cron, dcron, या cronie (Vixie का Red Hat फ़ोर्क) भेजते हैं। - Quartz Scheduler (James House, 1998)। Java लाइब्रेरी जिसने छह-फील्ड cron (अग्रणी सेकंड के साथ) और
L/W/#ऑपरेटर पेश किए। Apache और बाद में Terracotta को दान किया गया। Spring की@Scheduledएनोटेशन Quartz सिमेंटिक्स को एम्बेड करती है; Spring 5.3+ ने विवादास्पद रूप से सप्ताह-का-दिन को Quartz के «रविवार=1» से Linux के «रविवार=0» पर स्विच किया, इसलिए अब वही स्ट्रिंग विभिन्न संस्करणों के तहत विभिन्न दिनों का अर्थ है। - systemd टाइमर (Lennart Poettering, 2010)। अधिकांश आधुनिक Linux वितरणों पर cron की जगह लेता है। एक भिन्न व्याकरण (
OnCalendar=Mon..Fri 09:00) का उपयोग करता है, कैलेंडर और मोनोटोनिक दोनों शेड्यूल का समर्थन करता है,journaldमें लॉग करता है, सेवा निर्भरताएँ घोषित कर सकता है,systemd-analyze calendarके साथ मान्य करता है, औरPersistent=trueके माध्यम से cron-जैसी सटीकता को anacron-जैसी कैच-अप के साथ संयोजित करता है। - NCronTab (Azure Functions, 2016)। सेकंड पहले के साथ छह फ़ील्ड:
{second} {minute} {hour} {day} {month} {day-of-week}। कोई वर्ष फ़ील्ड नहीं। डिफ़ॉल्ट समय क्षेत्र UTC है; Linux App Service योजनाओं परWEBSITE_TIME_ZONEऐप सेटिंग के साथ ओवरराइड करें। - AWS EventBridge cron वाक्यविन्यास। वर्ष अंतिम के साथ छह फ़ील्ड:
cron(min hr dom mon dow yr)। उपयोग न किए गए dom/dow में से किसी एक में प्लेसहोल्डर के रूप में शाब्दिक?की आवश्यकता है। QuartzL,W,#का समर्थन करता है। मूल रूप से CloudWatch Events (2014), 2019 में EventBridge का नाम बदला गया। - 5-बनाम-6-फील्ड पोर्टेबिलिटी समस्या। पाँच-फील्ड Linux अभिव्यक्ति को Quartz या Spring में पेस्ट करने से «cron expression must consist of 6 fields» त्रुटियाँ उत्पन्न होती हैं; छह-फील्ड अभिव्यक्ति को Linux cron में पेस्ट करने से «bad day-of-week» उत्पन्न होता है क्योंकि Linux सेकंड कॉलम को मिनट के रूप में पढ़ता है। उल्टी गलती अधिक खतरनाक है क्योंकि यह चुपचाप पार्स कर सकती है और गलत शेड्यूल पर चल सकती है।
- Jenkins
H(हैश) विस्तार। Jenkins मानक cron कोHके साथ विस्तारित करता है, जो हर कार्य को एक ही क्षण में चलाने के बजाय प्रति-कार्य एक स्थिर लेकिन यादृच्छिक मान चुनता है।H * * * *का अर्थ है «हर घंटे, लेकिन प्रत्येक कार्य के लिए अलग मिनट पर», कई कार्यों के मिनट 0 पर शेड्यूल करते समय «थंडरिंग हर्ड» समस्या को रोकता है।
अधिक अक्सर पूछे जाने वाले प्रश्न
क्या पाँच फ़ील्ड छह या सात के समान हैं?
नहीं। क्लासिक POSIX रूप पाँच फ़ील्ड (मिनट, घंटा, माह-का-दिन, माह, सप्ताह-का-दिन) है। Quartz और Spring एक अग्रणी सेकंड कॉलम जोड़कर छह फ़ील्ड का उपयोग करते हैं, और Quartz एक वैकल्पिक सातवें वर्ष फ़ील्ड को स्वीकार करता है। AWS EventBridge हमेशा वर्ष में समाप्त होने वाले छह फ़ील्ड का उपयोग करता है (cron(min hr dom mon dow yr))। पाँच-फील्ड अभिव्यक्ति को Quartz या Spring में पेस्ट करने से वाक्यविन्यास त्रुटि उत्पन्न होती है; छह-फील्ड अभिव्यक्ति को Linux में पेस्ट करने से फ़ील्ड चुपचाप गलत व्याख्या होती है।
cron सबसे छोटा अंतराल क्या व्यक्त कर सकता है?
मानक Unix cron पर हर मिनट (* * * * *)। कोई अंतर्निहित सेकंड फ़ील्ड नहीं है। Quartz या NCronTab जैसे शेड्यूलर यदि आपको उप-मिनट ताल की आवश्यकता है तो एक जोड़ते हैं, और systemd टाइमर OnUnitActiveSec=30s का उपयोग कर सकते हैं। GitHub Actions सबसे छोटी ताल को 5 मिनट पर सीमित करता है, और EventBridge निर्धारित समय की 60-सेकंड खिड़की के भीतर ट्रिगर करता है, इसलिए कठोर वास्तविक समय सटीकता के लिए cron पर निर्भर न रहें।
मैं महीने के अंतिम दिन एक कार्य कैसे चलाऊँ?
मानक पाँच-फील्ड cron में कोई मूल «महीने का अंतिम दिन» ऑपरेटर नहीं है। Quartz और AWS EventBridge माह-का-दिन फ़ील्ड में L का समर्थन करते हैं: 0 0 L * ? अंतिम दिन आधी रात को ट्रिगर होता है। सादे Linux cron पर, सामान्य उपाय उम्मीदवार दिनों पर दैनिक शेड्यूल करना और कमांड को गेट करना है: 0 0 28-31 * * [ "$(date +\%d -d tomorrow)" = "01" ] && /path/to/script। systemd टाइमर इसे सीधे OnCalendar=*-*-* 00:00:00 के साथ व्यक्त करते हैं।
मेरा cron कार्य अपेक्षित समय पर क्यों नहीं चला?
सामान्य संदिग्ध, क्रम में: (1) सर्वर एक भिन्न समय क्षेत्र में है जिसका आप अनुमान लगाते हैं (date के साथ जाँचें); (2) PATH वह नहीं है जो आपके इंटरैक्टिव शेल के पास है, इसलिए एक कमांड प्रॉम्प्ट पर काम करती है लेकिन cron के तहत विफल हो जाती है (पूर्ण पथों का उपयोग करें); (3) आउटपुट ईमेल में गया और आपने इसे चूक दिया (MAILTO="" सेट करें या लॉगफ़ाइल पर पुनर्निर्देशित करें); (4) cron डेमॉन नहीं चल रहा है (systemctl status cron); (5) OR जाल (ऊपर देखें) उन अतिरिक्त दिनों पर ट्रिगर हो रहा है जिनका आपने इरादा नहीं किया।
cron, anacron, और systemd टाइमर के बीच क्या अंतर है?
Cron निर्धारित समय पर सिस्टम के चलने की अपेक्षा करता है और चुपचाप उन कार्यों को छोड़ देता है जो डाउनटाइम के दौरान आते हैं: हमेशा-चालू सर्वरों के लिए ठीक, लैपटॉप के लिए बुरा। Anacron प्रति-कार्य अंतिम-रन टाइमस्टैम्प को ट्रैक करता है और रीबूट के बाद चूकी हुई जॉब्स को कैच-अप करता है, मिनट-स्तर के बजाय दिन-स्तर की सटीकता की कीमत पर। systemd टाइमर अधिकांश आधुनिक Linux वितरणों पर cron की जगह लेते हैं: वे कैलेंडर और मोनोटोनिक दोनों शेड्यूल का समर्थन करते हैं, journald में लॉग करते हैं, सेवा निर्भरताएँ घोषित कर सकते हैं, और cron-जैसी सटीकता को anacron-जैसी कैच-अप के साथ संयोजित करने के लिए Persistent=true का उपयोग करते हैं।
समय क्षेत्र और दिन के उजाले की बचत cron को कैसे प्रभावित करती है?
अधिकांश cron डेमॉन सिस्टम समय क्षेत्र में शेड्यूल की व्याख्या करते हैं। क्लाउड सर्वरों पर इसका आमतौर पर अर्थ UTC होता है, इसलिए 0 9 * * * 9 AM UTC पर ट्रिगर होता है, स्थानीय 9 AM नहीं। Linux crontab में CRON_TZ=America/New_York सेट करें; Kubernetes spec.timeZone का उपयोग करता है; AWS, GCP, और Vercel प्रत्येक एक स्पष्ट IANA क्षेत्र लेते हैं। वसंत-आगे के दौरान, छूटे हुए घंटे में निर्धारित जॉब्स Vixie cron द्वारा तुरंत बाद चलाए जाते हैं लेकिन AWS EventBridge द्वारा पूरी तरह से छोड़ दिए जाते हैं। सबसे सुरक्षित पैटर्न cron को UTC में छोड़ना और कार्य के अंदर रूपांतरित करना है।