Cron एक्सप्रेशन क्या है?
Cron एक्सप्रेशन एक संक्षिप्त शेड्यूलिंग स्ट्रिंग है जो जॉब शेड्यूलर को बताती है कि कोई कार्य ठीक कब चलाना है। यह फॉर्मेट 1975 में Unix V7 cron डेमन में जन्मा था और तब से बहुत कम बदला है — वही पाँच-फ़ील्ड व्याकरण आज Kubernetes CronJobs, AWS EventBridge, GitHub Actions वर्कफ़्लो, Google Cloud Scheduler, GitLab CI, Jenkins पाइपलाइनों और हर Linux वितरण के साथ आने वाले crontab बाइनरी में दिखता है। व्याकरण तेरह या इतने अक्षरों में बहुत अर्थ पैक करता है, इसलिए एक पार्सर जो इसे सादे हिंदी में बदलता है, आत्मविश्वास से डिप्लॉय करने और सुबह 3 बजे रोलबैक करने के बीच का अंतर है।
Cron एक्सप्रेशन कैसे काम करता है?
एक मानक cron एक्सप्रेशन में पाँच स्पेस-अलग फ़ील्ड होती हैं जो मिलकर एक दोहराने वाला शेड्यूल परिभाषित करती हैं। इंजन हर मिनट वर्तमान समय को एक्सप्रेशन से मिलाता है और जब सभी पाँच फ़ील्ड मिलती हैं तो जॉब चलाता है। फ़ील्ड, बाएँ से दाएँ:
- मिनट (0–59)। घंटे के भीतर कौन सा मिनट जॉब चलेगी।
0का मतलब घंटे पर,30का मतलब आधे घंटे पर,*/5का मतलब हर पाँच मिनट (00, 05, 10, ...), और15,45का मतलब पंद्रह और पैंतालीस मिनट पर। - घंटा (0–23)। 24-घंटे की घड़ी पर दिन का कौन सा घंटा।
0आधी रात है,9सुबह 9 बजे है,17शाम 5 बजे है। रेंज (9-17कार्य घंटों के लिए) और स्टेप वैल्यू (*/2हर दूसरे घंटे के लिए) मिनट जैसे ही काम करते हैं। - महीने का दिन (1–31)। कौन सी कैलेंडर तारीख को चलाना है।
1का मतलब महीने की पहली,*का मतलब हर दिन,1,15का मतलब पहली और पंद्रहवीं।31से सावधान रहें — यह उन महीनों में चुपचाप छोड़ देता है जिनमें 31 दिन नहीं होते। - महीना (1–12 या JAN–DEC)। कौन से महीनों में चलाना है।
*का मतलब हर महीने,1,7का मतलब जनवरी और जुलाई,1-3का मतलब केवल Q1। अधिकांश कार्यान्वयनों में तीन-अक्षर महीने के नाम केस-असंवेदनशील होते हैं। - सप्ताह का दिन (0–7, जहाँ 0 और 7 दोनों रविवार हैं)। विशिष्ट सप्ताह के दिनों तक सीमित करता है।
1-5सोमवार से शुक्रवार है,0,6सप्ताहांत है,MON-FRIअधिकांश पार्सर में काम करता है। जब महीने का दिन और सप्ताह का दिन दोनों विशिष्ट मानों पर सेट हों, तो क्लासिक cron किसी भी मिलान पर चलता है (लॉजिकल OR), जो हर बार लोगों को चौंकाता है।
Cron एक्सप्रेशन पार्सर क्यों उपयोग करें?
- डिप्लॉय से पहले चुप्पी से होने वाली गलती पकड़ें। एक्सप्रेशन `0 2 */3 * *` हर तीन दिन सुबह 2 बजे चलती है, हर तीन मिनट पर नहीं — इसे यहाँ पेस्ट करें और आप प्रोडक्शन में भेजने से पहले सादी भाषा में देखेंगे।
- अधिकांश क्लाउड शेड्यूलर डिफ़ॉल्ट रूप से UTC में चलते हैं। अगले दस रन टाइम अपने स्थानीय ज़ोन में देखने से DST की वजह से एक घंटे की गड़बड़ी सुबह 3 बजे किसी को जगाने से पहले सामने आ जाती है।
- `@daily`, `@weekly` और `@monthly` जैसे शॉर्टकट सुविधाजनक लेकिन अस्पष्ट हैं। पार्सर आपको अंतर्निहित पाँच-फ़ील्ड फॉर्म दिखाता है ताकि आप जान सकें कि वास्तव में क्या शेड्यूल हुआ।
- फ़ील्ड-दर-फ़ील्ड बिल्डर से आप एक समय में एक कॉलम शेड्यूल बना सकते हैं और मानव-पठनीय विवरण लाइव अपडेट होते देख सकते हैं — यह cron मैन पेज को दसवीं बार पढ़ने से बहुत तेज़ है।
Cron एक्सप्रेशन का उपयोग कहाँ होता है?
Cron सिंटैक्स कहीं भी दिखता है जहाँ किसी जॉब को घड़ी के अनुसार दोहराना हो। तीन सबसे आम सतहें, प्रत्येक के विशिष्ट समस्या के साथ:
- बैकअप शेड्यूल। क्लासिक `crontab -e` एंट्री जो रात 2 बजे डेटाबेस को S3 में डंप करती है, या हर महीने की पहली तारीख पर `pg_dump` आर्काइव घुमाती है। `0 2 * * * /usr/local/bin/backup.sh` जैसी लाइन इतिहास में किसी भी cron लाइन से अधिक Linux सर्वरों पर भेजी गई है। मिनट और घंटा सही रखें, stderr को किसी टिकाऊ जगह पर रीडायरेक्ट करें, और आपने एक मैन्युअल चेकलिस्ट को फायर-एंड-फॉरगेट स्क्रिप्ट से बदल दिया।
- GitHub Actions `schedule` ट्रिगर। `.github/workflows/*.yml` में `on.schedule.cron` की मानक पाँच-फ़ील्ड cron स्वीकार करती है, लेकिन जॉब हमेशा UTC में चलती है और GitHub चुपचाप फायर-टाइम छोड़ देता है अगर रनर क्यू व्यस्त हो। सामान्य पैटर्न: `cron: '0 9 * * 1-5'` सोमवार से शुक्रवार 9 AM UTC पर डाइजेस्ट भेजने के लिए। पहले यहाँ अपने स्थानीय ज़ोन में प्रीव्यू करें।
- AWS EventBridge Scheduler। EventBridge cron एक्सप्रेशन में वर्ष के लिए छठा फ़ील्ड होता है और महीने के दिन या सप्ताह के दिन फ़ील्ड में `*` की जगह `?` चाहिए — `cron(0 9 ? * MON-FRI *)` क्लासिक weekday 9 AM cron का EventBridge अनुवाद है। Lambda इनवोकेशन, ECS टास्क रन और Step Function शुरुआत के लिए उपयोग किया जाता है; क्लासिक cron से मेल न खाना CloudFormation डिप्लॉय में `ValidationException` त्रुटियों का नंबर-एक स्रोत है।
एक वास्तविक cron एक्सप्रेशन कैसा दिखता है?
0 9 * * 1-5 लें — हर सप्ताह के दिन सुबह 9:00 बजे चलता है। फ़ील्ड बाएँ से दाएँ पढ़ें: 0 घंटे का शून्यवाँ मिनट है, 9 24-घंटे की घड़ी पर सुबह 9 बजे है, महीने के दिन पर * हर कैलेंडर दिन है, महीने पर * हर महीना है, और सप्ताह के दिन पर 1-5 सोमवार से शुक्रवार तक सीमित करता है। इसे ऊपर इनपुट में पेस्ट करें और पार्सर सोमवार से शुक्रवार, सुबह 09:00 बजे की पुष्टि करता है। AWS EventBridge सिंटैक्स में यही: cron(0 9 ? * MON-FRI *) — अंत में वर्ष फ़ील्ड और जहाँ मानक cron `*` उपयोग करता वहाँ `?`। Quartz एक्सप्रेशन के रूप में: 0 0 9 ? * MON-FRI। तीन अलग-अलग प्लेटफ़ॉर्म, तीन अलग-अलग सतह रूप, एक ही अंतर्निहित शेड्यूल।
Cron एक्सप्रेशन ठीक एक तरह से कठोर हैं: एक टाइपो आपको एक वाक्य-रचना मान्य शेड्यूल देता है जो गलत समय पर चलता है, बिना कोड रिव्यू में पकड़ने योग्य त्रुटि के। `0 0 1 * *` पढ़कर यह जानना कि यह हर महीने की पहली तारीख आधी रात को चलता है, न कि 1 जनवरी को, अभ्यास लगता है। ऊपर दिया पार्सर उस अभ्यास को दस-सेकंड की जाँच में बदल देता है — एक्सप्रेशन पेस्ट करें, हिंदी पढ़ें, अपने स्थानीय ज़ोन में अगले दस रन टाइम स्कैन करें, और YAML भेजें यह जानते हुए कि cron लाइन वास्तव में वही करती है जो commit मेसेज कहता है।
5-फ़ील्ड और 6-फ़ील्ड cron में क्या अंतर है?
पाँच-फ़ील्ड cron एक-मिनट रेजोल्यूशन वाला क्लासिक Unix व्याकरण है। छह-फ़ील्ड cron सब-मिनट शेड्यूलिंग के लिए एक अग्रणी सेकंड कॉलम जोड़ता है — Quartz और Spring के @Scheduled द्वारा उपयोग किया जाता है। AWS EventBridge भी छह फ़ील्ड उपयोग करता है, लेकिन उसका अतिरिक्त कॉलम सेकंड नहीं, अनुगामी वर्ष है।
@hourly, @daily और @weekly का क्या मतलब है?
Vixie-cron उपनाम 1987 में पेश किए गए। @hourly = 0 * * * *, @daily = 0 0 * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *, @yearly = 0 0 1 1 *। @reboot बूट पर एक बार चलता है। GitHub Actions और EventBridge इन उपनामों को अस्वीकार करते हैं।
Cron में रविवार दिन 0 है या दिन 7?
क्लासिक Vixie cron में दोनों — 0 और 7 दोनों स्वीकार किए जाते हैं ताकि 5-7 जैसी रेंज शुक्रवार-से-रविवार स्वाभाविक रूप से पढ़ी जा सके। सोमवार हमेशा 1 है, शनिवार हमेशा 6 है। Quartz और AWS EventBridge एक अलग परंपरा उपयोग करते हैं: 1-7 के साथ रविवार 1 के रूप में। मानने से पहले प्लेटफ़ॉर्म दस्तावेज़ जाँचें।
Cron डेलाइट सेविंग टाइम को कैसे संभालता है?
इंजन के टाइमज़ोन पर निर्भर करता है। UTC में (EventBridge, Kubernetes और GitHub Actions पर डिफ़ॉल्ट) DST मौजूद नहीं है। स्थानीय DST ज़ोन में, क्लासिक Vixie cron स्प्रिंग-फ़ॉरवर्ड गैप के दौरान जॉब छोड़ देता है और फ़ॉल-बैक के दौरान दो बार चलाता है; systemd टाइमर ठीक एक बार चलते हैं।