5 Crontab उदाहरण आपको Linux कार्यों को स्वचालित करने में मदद करने के लिए

क्रोन प्रोग्राम लिनक्स पर अन्य प्रोग्रामों के निष्पादन को स्वचालित करता है। क्रोन एक डेमॉन है जो लगातार चलता रहता है और दिए गए शेड्यूल के अनुसार अन्य प्रोग्राम शुरू करता है। कई अलग-अलग फाइलें इस शेड्यूल को परिभाषित करती हैं। उन्हें व्यक्तिगत रूप से क्रोंटैब के रूप में जाना जाता है।

क्रोन किसी भी यूनिक्स कमांड या कार्य को शेड्यूल कर सकता है। कभी-कभी, आप एक साधारण कमांड के साथ काम करना चाहेंगे। दूसरी बार, आपको पूरा कार्य करने के लिए एक स्क्रिप्ट लिखनी होगी। क्रॉन किसी भी दृष्टिकोण के साथ ठीक काम करता है। यह जटिल शेड्यूलिंग नियमों और स्क्रिप्ट आउटपुट से निपटने के लचीले तरीकों का भी समर्थन करता है।

चाहे आप साधारण उपयोगकर्ता कार्य कर रहे हों या पूर्ण विकसित सिस्टम प्रशासन, यह समझना कि व्यावहारिक उदाहरणों का उपयोग करके क्रोन कैसे काम करता है, एक जरूरी है।

1. सिस्टम-वाइड Crontab का उपयोग करके /tmp की सफाई

/tmp निर्देशिका किसी भी प्रोग्राम या सिस्टम के उपयोगकर्ता द्वारा सामान्य प्रयोजन के उपयोग के लिए एक अस्थायी स्थान है। कई यूनिक्स सिस्टम स्टार्टअप के दौरान /tmp निर्देशिका में पुरानी फाइलों को हटा देंगे। अन्य लोग इस ऑपरेशन को शेड्यूल करते हैं, अक्सर क्रॉन का उपयोग करते हुए।

हालाँकि, यदि आप इस प्रक्रिया पर कस्टम नियंत्रण चाहते हैं, या इसे किसी भिन्न निर्देशिका में लागू करना चाहते हैं, तो त्वरित क्रॉन कार्य सेट करना ऐसा करने का एक आसान तरीका है।

यहाँ /tmp, या अपनी पसंद की किसी अन्य निर्देशिका को साफ करने का एक तरीका है:

 1 3 * * * /usr/bin/find /tmp -type f -atime +10 -delete

हर दिन तीन बजकर एक मिनट पर क्रोन इस कमांड को निष्पादित करेगा। यह /tmp निर्देशिका में फ़ाइलों को खोजने के लिए खोज कमांड का उपयोग करता है। यह सामान्य फ़ाइलों के अलावा कुछ भी फ़िल्टर करता है जिसे कम से कम 10 दिन पहले अंतिम बार संशोधित किया गया था। इसके बाद यह ऐसी सभी फाइलों को हटा देता है जो इसे मिलती हैं।

आपको इस तरह की कमांड को वैश्विक क्रॉस्टैब में जोड़ना चाहिए जैसे कि /etc/crontab या root's crontab का उपयोग करके sudo crontab -e । कमांड को रूट के रूप में चलाने की जरूरत है ताकि यह /tmp में फाइलों को हटा सके, भले ही उनका मालिक कोई भी हो।

ध्यान दें कि यह उदाहरण खोज कमांड का पूरा पथ निर्दिष्ट करता है। निष्पादन योग्य की खोज के लिए क्रॉन एक बुनियादी पाथ सेटिंग का उपयोग करता है, इसलिए यदि कमांड एक मानक स्थान (जैसे /usr/bin ) में है, तो यह वास्तव में आवश्यक नहीं है। यदि आप उस दृष्टिकोण को पसंद करते हैं तो आप क्रॉस्टैब में ही एक वैकल्पिक पथ निर्दिष्ट कर सकते हैं। लेकिन आदेशों के लिए पूर्ण पथ का उपयोग करना थोड़ा अधिक लचीला है।

यदि आप किसी ऐसे प्रोजेक्ट पर काम कर रहे हैं जो लॉग लिखता है या कैश्ड डेटा संग्रहीत करता है, तो डिस्क स्थान साफ़ करने के लिए फ़ाइलों को हटाते समय इस प्रकार का दृष्टिकोण महत्वपूर्ण हो सकता है। जबकि उपरोक्त उदाहरण एक त्वरित और गंदा दृष्टिकोण है, आपको tmpwatch जैसे कमांड का उपयोग करना चाहिए, यदि यह उपलब्ध है।

2. डेटाबेस बैकअप दो बार दैनिक

अब से, उपयोगकर्ता-विशिष्ट कार्यों पर ध्यान केंद्रित करें जिन्हें आप अपने स्थानीय क्रॉस्टैब के माध्यम से प्रबंधित कर सकते हैं। आप निम्न आदेश का उपयोग करके अपने वर्तमान उपयोगकर्ता के क्रॉस्टैब को संपादित कर सकते हैं:

 crontab -e

इस क्रॉस्टैब में ऐसे कार्य होने चाहिए जो आपके उपयोगकर्ता खाते के लिए विशिष्ट हों। कल्पना कीजिए कि आप एक प्रोजेक्ट पर काम कर रहे हैं जिसमें एक MySQL डेटाबेस को पॉप्युलेट करना शामिल है। आप एक संपूर्ण डेटाबेस का SQL डंप बनाने के लिए mysqldump टूल का उपयोग कर सकते हैं। इसके आउटपुट को पुनर्निर्देशित करके, आपके पास आसान, शेड्यूल्ड डेटाबेस बैकअप हो सकता है।

 30 4 * * * /usr/local/mysql/bin/mysqldump --login-path=local --databases albums > /tmp/album-db.$(date +%s).sql

डिफ़ॉल्ट रूप से, क्रॉन उस उपयोगकर्ता को ईमेल के माध्यम से आउटपुट (त्रुटियों सहित) भेजता है जिससे crontab फ़ाइल संबंधित है। लेकिन आप आउटपुट को उसी तरह से रीडायरेक्ट कर सकते हैं जैसे आप कमांड लाइन से > फ़ाइल नाम नोटेशन का उपयोग करके करते हैं।

ध्यान दें कि उपरोक्त उदाहरण वर्तमान यूनिक्स टाइमस्टैम्प के आधार पर फ़ाइल नाम बनाने के लिए कमांड प्रतिस्थापन का उपयोग कैसे करता है। क्योंकि % प्रतीक का क्रोन के लिए एक विशेष अर्थ है, कमांड को इसे पूर्ववर्ती बैकस्लैश से बचाना होगा।

3. कस्टम स्क्रिप्ट के साथ साइट अपटाइम की जाँच करना

आपने देखा होगा कि पिछले उदाहरण में कमांड असुविधाजनक रूप से लंबी थी। शुक्र है, आपको स्क्रिप्ट में कमांड को सेव करने और अपने कॉन्टैब के माध्यम से उस स्क्रिप्ट को निष्पादित करने से रोकने के लिए कुछ भी नहीं है। यहां एक उदाहरण दिया गया है जो हर मिनट एक स्क्रिप्ट चलाता है:

 * * * * * /Users/bobby/bin/site-monitor.sh

ध्यान दें कि, सिद्धांत रूप में, आप छोटे कमांड के लिए HOME चर या टिल्ड विस्तार का उपयोग कर सकते हैं:

 * * * * * ~/bin/site-monitor.sh

आप ऐसा करने से बचना चुन सकते हैं, अगर क्रॉन कभी इसका समर्थन करना बंद कर देता है। पूर्ण पथ का उपयोग करने में कोई वास्तविक हानि नहीं है और यह तर्कसंगत रूप से अधिक पठनीय है।

किसी दिए गए URL के लिए HTTP स्थिति कोड लाने के लिए स्क्रिप्ट स्वयं कर्ल प्रोग्राम का उपयोग करती है। यदि स्थिति सफलता के अलावा कुछ भी इंगित करती है, तो स्क्रिप्ट आउटपुट को एक संदेश लिखती है।

जैसा कि पहले उल्लेख किया गया है, क्रॉन इस आउटपुट को हमें ईमेल के माध्यम से भेजेगा। क्रॉन में कमांड का सफलता पर कोई आउटपुट नहीं होना उपयोगी हो सकता है।

 #!/bin/bash
STATUS=`curl -s -o /dev/null -I -w "%{http_code}" http://example.com/`
if [ "$STATUS" != "200" ]
then
echo "site appears to be down"
fi

4. ईमेल के माध्यम से डिस्क स्थान रिपोर्ट

यदि आप क्रॉन के डिफ़ॉल्ट ईमेल व्यवहार को बदलना चाहते हैं, तो आप मेलो पर्यावरण चर का उपयोग कर सकते हैं। क्रोन कुछ चरों का समर्थन करता है जिन्हें आप अपनी crontab फ़ाइल में सेट कर सकते हैं। इसके बाद क्रॉन इन चरों को प्रत्येक कमांड के वातावरण में लागू करता है।

वैकल्पिक लक्ष्य ईमेल पता सेट करने के लिए, निम्न प्रारूप का उपयोग करें:

 [email protected]

आपको इसे एक ऐसी मशीन पर चलाना होगा जो आवश्यकता पड़ने पर बाहरी ईमेल भेजने के लिए सेट की गई हो। यहां एक उदाहरण दिया गया है जो उसी मशीन पर किसी अन्य उपयोगकर्ता को एक ईमेल भेजेगा। यह दिन में दो बार 12:00 और 23:00 बजे चलती है। डीएफ कमांड मुक्त डिस्क स्थान प्रदर्शित करता है, इसलिए यह क्रोंटैब प्रविष्टि यह जांचने का कार्य दर्शाती है कि डिस्क स्थान ठीक दिखता है:

 MAILTO="sarah"
0 12,23 * * * /bin/df -h

परिणामी ईमेल कुछ इस तरह दिखेगा:

ध्यान दें कि क्रॉन अपने स्वयं के कस्टम ईमेल हेडर जोड़ता है। ये डिबगिंग के लिए उपयोगी हो सकते हैं। आप खाली स्ट्रिंग का उपयोग करके क्रॉन के डिफ़ॉल्ट ईमेल व्यवहार को अक्षम भी कर सकते हैं:

 MAILTO=""

5. विशिष्ट समय पर संदेश प्रसारित करें

अन्य उदाहरण काफी सीधे शेड्यूलिंग का उपयोग करते हैं, लेकिन क्रोन समय विनिर्देशों के लिए एक शक्तिशाली सिंटैक्स का समर्थन करता है। यह न केवल सटीक मिलानों को संभालता है, बल्कि:

  • अल्पविराम ( , ) द्वारा अलग किए गए अनेक मान
  • हाइफ़न ( ) के साथ निर्दिष्ट श्रेणियां
  • फ़ॉरवर्ड स्लैश ( / ) के बाद चरण मान

इसलिए, उदाहरण के लिए, यदि आप काम के घंटों के दौरान सभी लॉग-इन उपयोगकर्ताओं को एक घंटे में दो बार संदेश भेजना चाहते हैं, लेकिन केवल हर तीन घंटे में, निम्न जैसा कुछ पर्याप्त होगा:

 0 15,45 9-17/3 ? * * * echo 'Enjoy your work!' | wall

यह कमांड हर तीन घंटे में सुबह 9 बजे से शाम 5 बजे तक 15 बजकर 45 मिनट पर अमल करेगा। वॉल कमांड प्रत्येक लॉग-इन टर्मिनल उपयोगकर्ता को एक संदेश भेजता है।

आप यह भी पा सकते हैं कि क्रॉन आपके कैलेंडर ऐप की तुलना में अधिक लचीला शेड्यूलिंग प्रदान करता है। कुछ बदलाव आपको एक महीने के दूसरे शुक्रवार को या किसी निश्चित तिथि के निकटतम कार्यदिवस पर निष्पादित करने के लिए आदेश निर्दिष्ट करने की अनुमति देते हैं।

क्रोन कई प्रकार के लिनक्स कार्यों को स्वचालित कर सकता है

यह उस तरह के कार्यों का एक छोटा चयन है जो क्रोन आपको स्वचालित करने में मदद कर सकता है। जटिल सिंटैक्स के साथ सहज होने में कुछ समय लग सकता है, लेकिन क्रॉन एक शक्तिशाली उपयोगिता है। आप सिस्टम-व्यापी कार्यों और उपयोगकर्ता-विशिष्ट दोनों के लिए क्रॉन का उपयोग कर सकते हैं।

शेड्यूलिंग के लिए एक जटिल सिंटैक्स के साथ, क्रॉन शक्तिशाली है, लेकिन आपके पास शायद हाथ का एक अच्छा संदर्भ होना चाहिए। Crontabs टिप्पणियों की अनुमति देता है, इसलिए हो सकता है कि आप समय फ़ील्ड का दस्तावेज़ीकरण करने के लिए अपने में एक टिप्पणी पंक्ति शामिल करना चाहें।