इस लेख में
Crontab क्या है?
Crontab (cron table) Unix जैसी ऑपरेटिंग सिस्टम में मौजूद एक समय-आधारित जॉब शेड्यूलर है। यह आपको कमांड या स्क्रिप्ट को तय अंतराल पर अपने आप चलाने के लिए शेड्यूल करने देता है — हर मिनट से लेकर साल में एक बार तक। cron डेमन crontab फाइलों को पढ़ता है और शेड्यूल किए गए कमांड को उनके निर्धारित समय पर चलाता है।
किसी सिस्टम पर हर उपयोगकर्ता की अपनी crontab फाइल हो सकती है, और एक सिस्टम-व्यापी crontab भी होती है। crontab फाइल में cron जॉब्स की सूची होती है, जहाँ हर पंक्ति पाँच-फील्ड वाले समय एक्सप्रेशन के बाद चलाने वाले कमांड के साथ एक शेड्यूल परिभाषित करती है।
Cron एक्सप्रेशन का सिंटैक्स
एक cron एक्सप्रेशन स्पेस से अलग किए गए पाँच फील्ड से बनता है, जिनमें से हर एक समय की एक इकाई दर्शाता है। विशेष अक्षर आपको जटिल शेड्यूल परिभाषित करने देते हैं:
- मिनट (0-59) — बताता है कि जॉब घंटे के किस मिनट पर चलना चाहिए
- घंटा (0-23) — 24-घंटे के फॉर्मैट में दिन का कौन-सा घंटा दर्शाता है
- महीने का दिन (1-31) — महीने का कौन-सा दिन बताता है
- महीना (1-12) — साल का कौन-सा महीना दर्शाता है
- सप्ताह का दिन (0-7, जहाँ 0 और 7 दोनों रविवार दर्शाते हैं) — सप्ताह का कौन-सा दिन बताता है
विशेष अक्षरों में शामिल हैं: * (कोई भी मान), / (स्टेप मान, जैसे */5 का अर्थ हर 5 इकाई), - (रेंज, जैसे 1-5 का अर्थ सोमवार से शुक्रवार), और अल्पविराम (सूचियाँ, जैसे 1,15 का अर्थ 1 और 15 तारीख)।
आम Cron पैटर्न
यहाँ सबसे अधिक इस्तेमाल होने वाले cron एक्सप्रेशन दिए गए हैं जो अधिकांश शेड्यूलिंग ज़रूरतों को पूरा करते हैं:
- */5 * * * * — हर 5 मिनट में, आमतौर पर हेल्थ चेक और मॉनिटरिंग स्क्रिप्ट के लिए इस्तेमाल होता है
- 0 * * * * — हर घंटे मिनट 0 पर, घंटावार डेटा सिंक या रिपोर्ट बनाने के लिए उपयुक्त
- 0 0 * * * — रोज़ आधी रात को, बैकअप, लॉग रोटेशन और सफाई कार्यों के लिए मानक शेड्यूल
- 0 0 * * 1-5 — हर कार्यदिवस को आधी रात को, केवल कार्यदिवस पर प्रोसेसिंग के लिए उपयोगी
- 0 0 1 * * — हर महीने के पहले दिन आधी रात को, आमतौर पर मासिक रिपोर्ट और बिलिंग के लिए इस्तेमाल होता है
- 0 9,17 * * 1-5 — कार्यदिवसों पर सुबह 9 बजे और शाम 5 बजे, दिन की शुरुआत और अंत की सूचनाओं के लिए आदर्श
निःशुल्क आज़माएँ — कोई साइनअप आवश्यक नहीं
एक Cron एक्सप्रेशन बनाएँ →आम उपयोग के मामले
Cron जॉब्स लगभग किसी भी दोहराए जाने वाले सिस्टम कार्य को स्वचालित करती हैं। यहाँ सबसे आम अनुप्रयोग दिए गए हैं:
- लॉग रोटेशन और सफाई — डिस्क स्पेस की समस्याओं से बचने के लिए पुरानी लॉग फाइलों को अपने आप संपीड़ित, संग्रहित या हटाएँ
- डेटाबेस बैकअप — सुसंगत बैकअप स्नैपशॉट बनाने के लिए नियमित mysqldump, pg_dump या mongodump कमांड शेड्यूल करें
- रिपोर्ट बनाना — एप्लिकेशन डेटा से दैनिक, साप्ताहिक या मासिक रिपोर्ट संकलित करके ईमेल करें
- कैश साफ़ करना — मेमोरी खाली करने और डेटा को ताज़ा रखने के लिए समय-समय पर समाप्त हो चुकी कैश प्रविष्टियाँ हटाएँ
- सिस्टम मॉनिटरिंग — नियमित अंतराल पर हेल्थ चेक, डिस्क स्पेस अलर्ट और अपटाइम सत्यापन स्क्रिप्ट चलाएँ
सुझाव और सामान्य गलतियाँ
अनुभवी डेवलपर्स को भी आम cron गलतियों का सामना करना पड़ता है। शेड्यूलिंग की परेशानियों से बचने के लिए इन सुझावों को ध्यान में रखें:
- टाइमज़ोन की जानकारी — cron डिफ़ॉल्ट रूप से सिस्टम टाइमज़ोन का उपयोग करता है। डेलाइट सेविंग टाइम बदलावों के दौरान भ्रम से बचने के लिए अपने crontab में TZ सेट करें या UTC का उपयोग करें
- ओवरलैपिंग जॉब्स — यदि कोई जॉब अंतराल से अधिक समय लेती है, तो कई इंस्टेंस एक साथ चल सकते हैं। ओवरलैप रोकने के लिए flock या PID फाइल का उपयोग करें
- PATH की समस्याएँ — cron न्यूनतम एनवायरनमेंट के साथ चलता है। कमांड के लिए हमेशा पूर्ण पथ का उपयोग करें और अपने crontab के शीर्ष पर स्पष्ट रूप से PATH सेट करें
- आउटपुट संभालना — cron डिफ़ॉल्ट रूप से stdout और stderr को उपयोगकर्ता को ईमेल करता है। मेल स्पूल भरने से बचने के लिए आउटपुट को लॉग फाइल या /dev/null पर रीडायरेक्ट करें
- डिबगिंग — निष्पादन रिकॉर्ड के लिए /var/log/syslog या /var/log/cron देखें। crontab में जोड़ने से पहले अपने कमांड को मैन्युअल रूप से जाँचें
अक्सर पूछे जाने वाले प्रश्न
क्या cron सेकंड-स्तरीय परिशुद्धता के साथ जॉब्स शेड्यूल कर सकता है?
मानक cron सेकंड का समर्थन नहीं करता — सबसे छोटी इकाई एक मिनट है। यदि आपको सेकंड-स्तरीय परिशुद्धता चाहिए, तो आप एक ऐसी स्क्रिप्ट हर मिनट चलाने जैसा वैकल्पिक तरीका अपना सकते हैं जो आंतरिक रूप से sleep कमांड के साथ लूप करती है, या systemd timers जैसे समर्पित शेड्यूलर पर स्विच कर सकते हैं जो एक मिनट से कम के अंतराल का समर्थन करते हैं।
cron और systemd timers में क्या अंतर है?
cron पारंपरिक Unix शेड्यूलर है जो पाँच-फील्ड वाले समय एक्सप्रेशन के साथ crontab फाइलों का उपयोग करता है। systemd timers Linux पर एक नया विकल्प है जो एक मिनट से कम की परिशुद्धता, कैलेंडर इवेंट सिंटैक्स, छूटे हुए रन को पकड़ने वाले परसिस्टेंट टाइमर और बेहतर लॉगिंग एकीकरण जैसी सुविधाएँ प्रदान करता है। cron सरल और अधिक पोर्टेबल है; systemd timers अधिक शक्तिशाली लेकिन Linux-विशिष्ट हैं।
किसी cron जॉब को शेड्यूल करने से पहले मैं उसका परीक्षण कैसे करूँ?
पहले, सटीक कमांड को अपने टर्मिनल में मैन्युअल रूप से चलाकर सत्यापित करें कि यह काम करता है। फिर cron के समान न्यूनतम एनवायरनमेंट के साथ परीक्षण करने के लिए यह चलाकर cron एनवायरनमेंट का अनुकरण करें: env -i /bin/sh -c 'your-command'। अंत में, इसे हर मिनट (* * * * *) चलाने के लिए शेड्यूल करें, cron लॉग में सत्यापित करें कि यह सही ढंग से चलता है, फिर अपने वांछित शेड्यूल में बदलें।