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 अभिव्यक्ति की संरचना

अभिव्यक्ति कहाँ उपयोग होती है

मानक, बोलियाँ, और मील के पत्थर

अधिक अक्सर पूछे जाने वाले प्रश्न

क्या पाँच फ़ील्ड छह या सात के समान हैं?

नहीं। क्लासिक 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 में छोड़ना और कार्य के अंदर रूपांतरित करना है।

संबंधित टूल