cron क्या है?
cron हर Linux डिस्ट्रिब्यूशन में बना हुआ समय-आधारित जॉब शेड्यूलर है। यह कमांड और स्क्रिप्ट को निश्चित समय, तारीख़ों या अंतरालों पर स्वतः चलाता है — बैकअप, लॉग रोटेशन, सर्टिफ़िकेट नवीनीकरण, डेटाबेस क्लीनअप, और एप्लिकेशन शेड्यूलर ट्रिगर करने के लिए एकदम सही। Ubuntu पर यह शेड्यूलर cron.service नामक एक बैकग्राउंड सेवा के रूप में चलता है, और आप परिभाषित करते हैं कि उसे क्या चलाना है, ऐसी फ़ाइलों में जिन्हें crontabs कहते हैं।
यह गाइड Ubuntu 22.04/24.04 LTS पर प्रति-उपयोगकर्ता और सिस्टम-वाइड cron jobs, सटीक सिंटैक्स, एनवायरनमेंट व लॉगिंग को संभालने का तरीका, और मैनेज्ड VPS या क्लाउड सर्वर पर शेड्यूल किए गए कार्यों को भरोसेमंद ढंग से चलाते रहने को कवर करती है।
जाँचें कि cron इंस्टॉल और चालू है
Ubuntu पर cron डेमॉन cron पैकेज द्वारा उपलब्ध कराया जाता है और आमतौर पर पहले से ही इंस्टॉल रहता है। इसे सत्यापित करें:
systemctl status cron
आपको Active: active (running) दिखना चाहिए। यदि पैकेज मौजूद नहीं है, तो इसे इंस्टॉल और सक्षम करें:
sudo apt update && sudo apt install -y cron
sudo systemctl enable --now cron
crontab सिंटैक्स को समझना
प्रत्येक cron job एक ही पंक्ति होती है जिसमें पाँच समय-और-तारीख़ फ़ील्ड होते हैं, उसके बाद चलाने वाली कमांड होती है:
# ┌───────────── minute (0–59)
# │ ┌───────────── hour (0–23)
# │ │ ┌───────────── day of month (1–31)
# │ │ │ ┌───────────── month (1–12)
# │ │ │ │ ┌───────────── day of week (0–7, where 0 and 7 are Sunday)
# │ │ │ │ │
# * * * * * command to execute
प्रत्येक फ़ील्ड ये स्वीकार करता है:
| ऑपरेटर | अर्थ | उदाहरण |
|---|---|---|
* |
हर मान | * * * * * = हर मिनट |
, |
एक सूची | 0,30 * * * * = :00 और :30 पर |
- |
एक रेंज | 0 9-17 * * * = सुबह 9 बजे से शाम 5 बजे तक हर घंटे |
/ |
एक स्टेप | */15 * * * * = हर 15 मिनट में |
कुछ विस्तृत उदाहरण:
0 2 * * * # every day at 02:00
*/5 * * * * # every 5 minutes
30 3 * * 1 # 03:30 every Monday
0 0 1 * * # midnight on the 1st of every month
0 8 * * 1-5 # 08:00 Monday–Friday
पाँच फ़ील्ड के बजाय आप इन शॉर्टहैंड स्ट्रिंग्स का भी उपयोग कर सकते हैं: @reboot, @hourly, @daily, @weekly, @monthly, और @yearly। उदाहरण के लिए, @reboot हर बार सर्वर बूट होने पर एक बार जॉब चलाता है।
प्रति-उपयोगकर्ता cron job बनाना
अधिकांश एप्लिकेशन कार्यों को root के बजाय एक सामान्य उपयोगकर्ता के रूप में चलना चाहिए। अपने उपयोगकर्ता के crontab को इससे संपादित करें:
crontab -e
पहली बार में, आपसे एक एडिटर चुनने को कहा जाएगा (nano सबसे सरल है)। एक जॉब जोड़ें — उदाहरण के लिए, हर दिन रात 1:30 बजे एक बैकअप स्क्रिप्ट चलाएँ और आउटपुट को लॉग करें:
30 1 * * * /home/deploy/scripts/backup.sh >> /home/deploy/logs/backup.log 2>&1
सहेजें और बाहर निकलें। cron नया शेड्यूल तुरंत इंस्टॉल कर देता है — किसी रीस्टार्ट की ज़रूरत नहीं। अपने jobs को crontab -l से सूचीबद्ध करें, और उन सभी को crontab -r से हटाएँ (सावधानी से उपयोग करें)।
>> file 2>&1 भाग स्टैंडर्ड आउटपुट और एरर दोनों को एक लॉग फ़ाइल में जोड़ता है। यह महत्वपूर्ण है: डिफ़ॉल्ट रूप से cron आउटपुट को स्थानीय उपयोगकर्ता को ईमेल कर देता है, जिसे आप आमतौर पर कभी नहीं देखते, इसलिए स्पष्ट लॉगिंग ही वह तरीक़ा है जिससे आप विफलताओं को डीबग करते हैं।
सिस्टम-वाइड jobs और run-parts डायरेक्टरियाँ
Root-स्तर के और पैकेज किए गए jobs /etc/crontab और /etc/cron.d/ में रहते हैं। इन फ़ाइलों में समय फ़ील्ड और कमांड के बीच एक अतिरिक्त फ़ील्ड — उपयोगकर्ता नाम — होता है:
# m h dom mon dow user command
0 4 * * * root /usr/local/bin/cleanup.sh
सामान्य मामलों के लिए आपको कोई शेड्यूल लिखने की भी ज़रूरत नहीं है। Ubuntu इन डायरेक्टरियों में डाली गई किसी भी चीज़ को एक निश्चित अंतराल पर चलाता है:
/etc/cron.hourly/
/etc/cron.daily/
/etc/cron.weekly/
/etc/cron.monthly/
/etc/cron.daily/ में एक एक्ज़ीक्यूटेबल स्क्रिप्ट (बिना किसी फ़ाइल एक्सटेंशन के, chmod +x) रखें और यह दिन में एक बार चलेगी। यह मेंटेनेंस स्क्रिप्ट्स को शिप करने का सबसे साफ़-सुथरा तरीक़ा है।
एनवायरनमेंट और PATH की समस्याएँ
किसी जॉब के "मेरे शेल में चलता है पर cron में नहीं" होने का सबसे आम कारण एनवायरनमेंट है। cron एक न्यूनतम PATH (आमतौर पर /usr/bin:/bin) के साथ चलता है और आपके .bashrc या प्रोफ़ाइल को लोड नहीं करता। दो समाधान:
- बाइनरी और फ़ाइलों के लिए हमेशा निरपेक्ष (absolute) पाथ का उपयोग करें (
/usr/bin/php, न किphp)। - crontab के शीर्ष पर वेरिएबल सेट करें:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=ops@example.com
SHELL=/bin/bash
*/10 * * * * cd /var/www/app && /usr/bin/php artisan schedule:run >> /var/log/app-cron.log 2>&1
ध्यान दें कि MAILTO="" सभी ईमेल को बंद कर देता है; इसे किसी पते पर सेट करने से, यदि कोई मेलर कॉन्फ़िगर किया गया हो, तो जॉब का आउटपुट वहाँ भेजा जाता है।
टाइम ज़ोन
cron सर्वर के सिस्टम टाइम ज़ोन का उपयोग करता है, न कि आपके स्थानीय टाइम ज़ोन का — इसे भूलना आसान है जब आपकी टीम रियाद में हो लेकिन VPS डिफ़ॉल्ट रूप से UTC पर हो। इसे जाँचें और सेट करें:
timedatectl # shows current time zone
sudo timedatectl set-timezone Asia/Riyadh
टाइम ज़ोन बदलने के बाद, cron को रीस्टार्ट करें ताकि चल रहे jobs इसे अपना लें: sudo systemctl restart cron। अपने सर्वर को किंगडम के भीतर होस्ट करने का मतलब है कि यह स्वाभाविक रूप से रियाद के समय और PDPL डेटा-रेज़िडेंसी आवश्यकताओं के अनुरूप रहता है।
jobs को सत्यापित और डीबग करना
Ubuntu पर, cron गतिविधि सिस्टम जर्नल और /var/log/syslog में लॉग होती है (डिफ़ॉल्ट रूप से कोई अलग /var/log/cron नहीं होता)। एक्ज़ीक्यूशन को लाइव देखें:
grep CRON /var/log/syslog | tail
journalctl -u cron --since "1 hour ago"
यदि कोई जॉब फ़ायर नहीं हो रहा है, तो इस क्रम में जाँचें: cron सेवा चल रही है, पंक्ति में ठीक पाँच समय फ़ील्ड हैं (या एक @ स्ट्रिंग है), स्क्रिप्ट एक्ज़ीक्यूटेबल है, और आपकी लॉग फ़ाइल कमांड का आउटपुट दिखाती है। यह साबित करने के लिए कि कोई स्क्रिप्ट cron के सीमित एनवायरनमेंट में काम करती है, इसे env -i /bin/bash -c '/path/to/script.sh' से टेस्ट करें।
cron का उपयोग कौन कर सकता है, यह सीमित करना
यह नियंत्रित करने के लिए कि कौन-से उपयोगकर्ता crontabs इंस्टॉल कर सकते हैं, /etc/cron.allow (एक श्वेतसूची) या /etc/cron.deny (एक काली सूची) बनाएँ। यदि /etc/cron.allow मौजूद है, तो केवल सूचीबद्ध उपयोगकर्ता ही crontab का उपयोग कर सकते हैं — साझा सर्वर पर एक समझदारी भरा हार्डनिंग क़दम।
इसे Skyline Cloud पर भरोसेमंद ढंग से चलाएँ
एक cron job उतना ही भरोसेमंद होता है जितना वह सर्वर जिस पर यह चलता है। Skyline Cloud VPS या क्लाउड सर्वर पर, आपके शेड्यूल किए बैकअप, रिपोर्ट जनरेशन, और नवीनीकरण कार्य हमेशा-चालू इन्फ़्रास्ट्रक्चर पर चलते हैं जो सऊदी डेटा सेंटरों में होस्ट किया जाता है, स्थानीय अरबी सहायता और PDPL/NCA-अनुरूप डेटा रेज़िडेंसी के साथ। इसे Skyline बिज़नेस ईमेल होस्टिंग के साथ जोड़ें ताकि विफल jobs के बारे में MAILTO अलर्ट वास्तव में आपकी टीम तक पहुँचें।
किंगडम के भीतर के इन्फ़्रास्ट्रक्चर पर अपने वर्कलोड को स्वचालित करने के लिए तैयार हैं? अपना Skyline Cloud अकाउंट बनाएँ और मिनटों में एक VPS तैनात करें।
Comments
0 total · 0 threads