Cron की मूल बातें
हर यूज़र का एक क्रॉन फाइल हो सकता है जहां आप उन कार्यों को परिभाषित करते हैं जिन्हें आप चलाना चाहते हैं।
आप इस फाइल को crontab -e कमांड के साथ संपादित कर सकते हैं।
या crontab -l के साथ शेड्यूल्ड कार्यों को सूचीबद्ध करें।
उदाहरण क्रॉन जॉब:
0 0 * * * /opt/rubies/ruby-2.5.1/bin/rake db:backup
सिंटैक्स थोड़ा ट्रिकी हो सकता है और आप हर समय इन फाइलों को हाथ से संपादित नहीं करना चाहेंगे।
क्या हमारे लिए चीजों को आसान बनाने के लिए कोई gems हैं?
हाँ!
Whenever Gem का उपयोग कैसे करें
क्योंकि क्रॉन सिंटैक्स याद रखना कठिन हो सकता है हम whenever जैसे gem का उपयोग कर सकते हैं।
यह gem आपको Ruby में क्रॉन जॉब्स परिभाषित करने में मदद करता है।
पहले gem इंस्टॉल करें।
फिर, कॉन्फिगरेशन फाइल बनाएं:
wheneverize . # [add] config/schedule.rb
इसे खोलें।
आप कुछ कमेंटेड-आउट उदाहरण देखेंगे, यदि आप चाहें तो उन्हें डिलीट करें।
मान लीजिए हम एक बैकअप जॉब चाहते हैं जो हर घंटे चलता है।
"config/schedule.rb" फाइल के अंदर यह लिखें:
every 1.hour do rake "db:backup" end
विकल्पों में शामिल हैं:
- rake (आपके वर्तमान प्रोजेक्ट पर परिभाषित एक rake टास्क शुरू करें, ध्यान दें कि
db:backupडिफ़ॉल्ट रूप से परिभाषित नहीं है, लेकिन आपdb:versionआज़मा सकते हैं) - runner (Ruby क्लास + मेथड, जैसे
Archive.backup_now) - command (सिस्टम कमांड)
अब:
whenever --update-crontab कमांड चलाएं ताकि क्रॉन एंट्रीज़ जनरेट हो सकें।
आप crontab -l के साथ अपनी नई एंट्री देख पाएंगे।
मुझे यह मिला:
0 * * * * /bin/bash -l -c 'cd /home/jesus/testing && RAILS_ENV=production bundle exec rake db:backup --silent'
ध्यान दें कि टास्क production मोड में चलेगा।
इसे बदलना चाहते हैं?
आप इस सेटिंग का उपयोग कर सकते हैं:
set :environment, "development"
यह आपकी schedule.rb फाइल में सबसे ऊपर जाता है।
आप इस कमांड का भी उपयोग कर सकते हैं:
whenever --update-crontab --set environment=development
यह कमांड चलाते समय सभी टास्क्स को "development" वातावरण के साथ बनाता है।
अधिक Whenever उदाहरण
यह उदाहरण दिखाता है कि आप कैसे अधिक विशिष्ट हो सकते हैं।
साप्ताहिक कार्य:
every :monday, at: "6:00 PM" do runner "Mail.send_weekly_newsletter" end
यह उदाहरण दिखाता है कि दिन में कई बार एक ही कार्य कैसे चलाएं।
दिन में दो बार कार्य चलाएं:
every :day, at: ["12:00 AM", "12:00 PM"] do command "rm tmp/testing.txt" end
Whenever Gem लॉगिंग और ट्रबलशूटिंग
एक बार जब आपके crontab फाइल में टास्क हों (crontab -l से जांचें) तो आप जाने के लिए तैयार हैं।
अगला:
आप कैसे जानते हैं कि शेड्यूल्ड टास्क सही ढंग से काम कर रहे हैं?
आप लॉगिंग सेट अप कर सकते हैं और आउटपुट पढ़ सकते हैं।
अपनी schedule.rb फाइल के शीर्ष पर इसे जोड़कर लॉगिंग सक्षम करें।
कॉन्फिगरेशन:
set :output, "log/cron.log"
हर बार जब आप बदलाव करें तो whenever --update-crontab कमांड चलाना याद रखें!
लॉग फाइल अभी भी खाली है?
शेड्यूल्ड समय का इंतजार करना होगा ताकि कुछ हो सके।
बताते चलें, यदि आप लॉग्स में यह एरर देखते हैं:
/bin/bash: bundle: command not found
इसका मतलब है कि क्रॉन आपके द्वारा उपयोग किए जा रहे Ruby के समान वर्जन नहीं चला रहा है।
यदि आप Ruby वर्जन मैनेजर का उपयोग कर रहे हैं:
इसे .bash_profile फाइल से लोड करना सुनिश्चित करें, .bashrc के बजाय, ताकि आपके क्रॉन टास्क इसका उपयोग कर सकें।
Whenever के विकल्प
Whenever एक अच्छी तरह से मेंटेन किया गया gem है और यह बहुत अच्छा काम करता है।
लेकिन विकल्प क्या हैं?
यहाँ एक सूची है:
- Heroku Scheduler, Heroku यूज़र्स के लिए एक मुफ्त जॉब शेड्यूलिंग एड-ऑन। क्रॉन जितना फ्लेक्सिबल नहीं लेकिन काम पूरा करता है
- Rufus Scheduler, एक Ruby gem जो क्रॉन को इन-मेमोरी शेड्यूलर से बदल देता है
- Sidecloq और Sidekiq-cron, दोनों Sidekiq एड-ऑन्स हैं जो Sidekiq में आवर्ती कार्य जोड़ते हैं
ध्यान दें कि दोनों Sidekiq एडऑन्स शेड्यूलिंग के लिए वास्तविक क्रॉन सिंटैक्स चाहते हैं, इसलिए यह whenever सिंटैक्स जितना अच्छा नहीं होगा।
अच्छी बात यह है कि वे Sidekiq वेब UI के साथ एकीकृत होते हैं।
सारांश
आपने Ruby में whenever gem का उपयोग करके क्रॉन जॉब्स शेड्यूल करना सीखा!
कृपया इस आर्टिकल को शेयर करें ताकि अधिक लोग इससे लाभ उठा सकें।
पढ़ने के लिए धन्यवाद।