Cron কী?
Cron হলো একটি জব শিডিউলিং সিস্টেম যা লিনাক্স এবং MacOS অপারেটিং সিস্টেমে উপলব্ধ।
এটি যেকোনো প্রোগ্রাম যেকোনো নির্দিষ্ট সময়ে রান করতে ব্যবহার করা যায়।
এতে রুবি কোডও شامل! যদি একটি নির্দিষ্ট রিকারিং টাস্ক রয়েছে যেটি আপনি স্বয়ংক্রিয়ভাবে প্রতি দিন, প্রতি সপ্তাহে বা এমনকি প্রতি ঘণ্টে রান করতে চান, তবে Cron আপনার খুঁজছেন সেটি হতে পারে।
টাস্কের উদাহরণ شامل:
- সাপ্তাহিক ডেটাবেস ব্যাকআপ রান করা
- ওয়েবসাইট এক্টিভিটির দৈনিক রিপোর্ট জেনারেট করা
- রিমাইন্ডার ইমেইল পাঠানো
চলুন শিখি কীভাবে আপনি cron কে আপনার কাজে লাগাতে পারেন!
Cron-র বেসিকস
প্রতিটি ইউজারের একটি cron ফাইল থাকতে পারে যেখানে আপনি রান করতে চাওয়া টাস্কগুলো ডিফাইন করেন।
আপনি crontab -e কমান্ড দিয়ে এই ফাইলটি এডিট করতে পারেন।
অথবা crontab -l দিয়ে শিডিউলড টাস্ক লিস্ট করতে পারেন।
উদাহরণ cron job:
0 0 * * * /opt/rubies/ruby-2.5.1/bin/rake db:backup
সিনট্যাক্স একটু ট্রিকি হতে পারে এবং আপনি হয়তো সবসময় হাত দিয়ে এগুলো এডিট করতে চাবেন না।
আমাদের জন্য জিনিসগুলো সহজ করার জন্য কোনো জেম আছে কি?
হ্যাঁ!
Whenever জেম কীভাবে ব্যবহার করবেন
কারণ cron সিনট্যাক্স মনে রাখা কঠিন হতে পারে আমরা whenever মত একটি জেম ব্যবহার করতে পারি।
এই জেম আপনাকে রুবিতে cron jobs ডিফাইন করতে সাহায্য করে।
প্রথমে জেমটি ইনস্টল করুন।
তারপর, কনফিগারেশন ফাইল তৈরি করুন:
wheneverize . # [add] config/schedule.rb
এটিকে খুলুন। আপনি কিছু কমেন্টেড-আউট উদাহরণ দেখবেন, চাইলে সেগুলো ডিলিট করুন।
মান লিন আমরা একটি ব্যাকআপ জব চাই যা প্রতি ঘণ্টে রান করবে।
"config/schedule.rb" ফাইলের ভিতরে এটি লিখুন:
every 1.hour do rake "db:backup" end
অপশনগুলো شامل:
- rake (আপনার বর্তমান প্রজেক্টে ডিফাইন করা একটি rake টাস্ক শুরু করুন, লক্ষ্য করুন
db:backupডিফল্টভাবে ডিফাইন্ড নয়, কিন্তু আপনিdb:versionট্রাই করতে পারেন) - runner (রুবি ক্লাস + মেথড, যেমন
Archive.backup_now) - command (সিস্টেম কমান্ড)
এখন:
whenever --update-crontab কমান্ড রান করুন cron এন্ট্রিগুলো জেনারেট করতে।
আপনি 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 জেম লগিং ও ট্রাবলশুটিং
আপনার একবার crontab ফাইলে টাস্ক থাকলে (চেক করুন crontab -l) আপনি রেডি।
পরবর্তী:
আপনি কীভাবে জানবেন শিডিউলড টাস্কগুলো সঠিকভাবে কাজ করছে কিনা?
আপনি লগিং সেটআপ করে আউটপুট পড়তে পারেন।
schedule.rb ফাইলের উপরে এটি যোগ করে লগিং ইনেবল করুন।
কনফিগারেশন:
set :output, "log/cron.log"
মনে রাখবেন whenever --update-crontab কমান্ড রান করুন প্রতিবার আপনি পরিবর্তন করার সময়!
লগ ফাইল এখনও খালি? আপনাকে শিডিউলড টাইম পর্যন্ত অপেক্ষা করতে হবে কিছু হয়ার জন্য।
বতে, আপনি যদি লগে এই এরর দেখেন:
/bin/bash: bundle: command not found
এর মানে cron সেই রুবি ভার্সন রান করছে না যা আপনি ব্যবহার করছেন।
আপনি যদি একটি রুবি ভার্সন ম্যানেজার ব্যবহার করেন:
নিশ্চিত করুন এটিকে .bash_profile ফাইল থেকে লোড করা হচ্ছে, .bashrc থেকে না, যাতে আপনার cron টাস্কগুলো এটি ব্যবহার করতে পারে।
Whenever-এর অল্টারনেটিভস
Whenever একটি ভালো মেইনটেইনড জেম এবং খুব ভালো কাজ করে।
কিন্তু অল্টারনেটিভগুলো কী কী?
এখানে একটি লিস্ট:
- Heroku Scheduler, হেরোকু ইউজারদের জন্য একটি ফ্রি জব শিডিউলিং অ্যাড-অন। Cron-এর মত ফ্লেক্সিবল নয় কিন্তু কাজ করে ফেলে
- Rufus Scheduler, একটি রুবি জেম যা cron কে একটি ইন-মেমরি শিডিউলার দিয়ে রিপ্লেস করে
- Sidecloq এবং Sidekiq-cron, দুটোই Sidekiq অ্যাড-অন যেগুলো Sidekiq-এ রিকারিং টাস্ক যোগ করে
লক্ষ্য করুন যে Sidekiq অ্যাড-অন দুটোই শিডিউলিংয়ের জন্য আসল cron সিনট্যাক্স চায়, তাই whenever সিনট্যাক্সের মত সুন্দর নয়।
ভালো দিকটি হলো সেগুলো Sidekiq web UI-এর সাথে ইন্টিগ্রেটেড।
সারসংক্ষেপ
আপনি whenever জেম ব্যবহার করে রুবিতে cron jobs শিডিউল করার পদ্ধতি শিখেছেন!
দয়া করে এই আর্টিকেল শেয়ার করুন যাতে আরও মানুষ এর লাভ নিতে পারে।
পড়ার জন্য ধন্যবাদ।