একজন অভিজ্ঞ লিনাক্স সিসঅ্যাডমিন জানেন রুটিন মেইনটেনেন্স জব ব্যাকগ্রাউন্ডে অটোমেটিক্যালি চালানোর গুরুত্ব।
Linux Cron ইউটিলিটি একটি নির্দিষ্ট সময় এবং/অথবা দিনে রুটিন ব্যাকগ্রাউন্ড জব শিডিউল করার একটি ইফেক্টিভ উপায়।
এই আর্টিকেল Productivity Tips For Geeks সিরিজের অংশ। এই আর্টিকেলে, আসুন ১৫টি অসাধারণ crontab জব শিডিউলিং উদাহরণ রিভিউ করি।
Linux Crontab ফরম্যাট
MIN HOUR DOM MON DOW CMD
| Field | Description | Allowed Value |
|---|---|---|
| MIN | Minute field | 0 to 59 |
| HOUR | Hour field | 0 to 23 |
| DOM | Day of Month | 1-31 |
| MON | Month field | 1-12 |
| DOW | Day Of Week | 0-6 |
| CMD | Command | Any command to be executed. |
১. নির্দিষ্ট সময়ের জন্য জব শিডিউল করা
cron-এর বেসিক ব্যবহার হল একটি নির্দিষ্ট সময়ে জব এক্সিকিউট করা নিচের মতো। এটি ফুল ব্যাকআপ শেল স্ক্রিপ্ট (full-backup) ১০ জুন সকাল ০৮:৩০ AM-এ এক্সিকিউট করবে।
দ্রষ্টব্য যে টাইম ফিল্ড ২৪ ঘন্টার ফরম্যাট ব্যবহার করে। তাই ৮ AM এর জন্য ৮, এবং ৮ PM এর জন্য ২০ ব্যবহার করুন।
30 08 10 06 * /home/ramesh/full-backup
- 30 – ৩০তম মিনিট
- 08 – ০৮ AM
- 10 – ১০তম দিন
- 06 – ৬ঠ মাস (জুন)
- * – সপ্তাহের প্রতিটি দিন
২. একাধিক ইনস্ট্যান্সের জন্য জব শিডিউল করা (যেমন দিনে দুবার)
নিচের স্ক্রিপ্ট প্রতিদিন দিনে দুবার ইনক্রিমেন্ট্যাল ব্যাকআপ নেয়।
এই উদাহরণটি নির্দিষ্ট ইনক্রিমেন্ট্যাল ব্যাকআপ শেল স্ক্রিপ্ট (incremental-backup) প্রতিদিন সকাল ১১:০০ এবং বিকাল ৪:০০-এ এক্সিকিউট করে। একটি ফিল্ডে কমা-সেপারেটেড ভ্যালু নির্দেশ করে যে কমান্ডটি উল্লেখিত সব সময়ে এক্সিকিউট হবে।
00 11,16 * * * /home/ramesh/bin/incremental-backup
- 00 – ০ মিনিট (ঘণ্টার শুরুতে)
- 11,16 – ১১ AM এবং ৪ PM
- * – প্রতিদিন
- * – প্রতিমাস
- * – সপ্তাহের প্রতিটি দিন
৩. নির্দিষ্ট টাইম রেঞ্জের জন্য জব শিডিউল করা (যেমন শুধু वিকডে)
আপনি যদি একটি জব নির্দিষ্ট টাইম রেঞ্জের মধ্যে প্রতिघণ্টা শিডিউল করতে চান, তবে নিচের পদ্ধতি ব্যবহার করুন।
কার্যদিবসে প্রতিঘণ্টা Cron Job
এই উদাহরণটি ডেটাবেসের স্ট্যাটাস চেক করে প্রতিদিন (শনিবার-রবিবার সহ) কর্মঘন্টার মধ্যে সকাল ৯টা থেকে বিকাল ৬টা পর্যন্ত।
00 09-18 * * * /home/ramesh/bin/check-db-status
- 00 – ০ মিনিট (ঘণ্টার শুরুতে)
- 09-18 – ৯ AM, ১০ AM, ১১ AM, ১২ PM, ১ PM, ২ PM, ৩ PM, ৪ PM, ৫ PM, ৬ PM
- * – প্রতিদিন
- * – প্রতিমাস
- * – সপ্তাহের প্রতিটি দিন
কার্যদিবসে মাত্র কর্মঘন্টায় Cron Job
এই উদাহরণটি ডেটাবেসের স্ট্যাটাস চেক করে প্রতিটি কার্যদিবসে (অর্থাৎ শনি-রবি বাদে) কর্মঘন্টা সকাল ৯টা থেকে বিকাল ৬টা পর্যন্ত।
00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
- 00 – ০ মিনিট (ঘণ্টার শুরুতে)
- 09-18 – ৯ AM, ১০ AM, ১১ AM, ১২ PM, ১ PM, ২ PM, ৩ PM, ৪ PM, ৫ PM, ৬ PM
- * – প্রতিদিন
- * – প্রতিমাস
- 1-5 -সোম, মঙ্গল, বুধ, বৃহস্পতি এবং শুক্র (প্রতিটি কার্যদিবস)
৪. Crontab এন্ট্রি কীভাবে দেখবেন?
কারেন্ট লগড-ইন ইউজারের Crontab এন্ট্রি দেখুন
আপনার crontab এন্ট্রি দেখতে আপনার ইউনিক্স অ্যাকাউন্ট থেকে crontab -l টাইপ করুন নিচের মতো।
ramesh@dev-db$ crontab -l @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space [দ্রষ্টব্য: এটি করেন্ট লগড-ইন ইউজারের crontab দেখায়]
রুট Crontab এন্ট্রি দেখুন
রুট ইউজার হিসেবে লগইন করুন (su – root) এবং crontab -l করুন নিচের মতো।
root@dev-db# crontab -l no crontab for root
Crontab HowTo: অন্যান্য লিনাক্স ইউজারের Crontab এন্ট্রি দেখুন
অন্যান্য লিনাক্স ইউজারের crontab এন্ট্রি দেখতে, রুট হিসেবে লগইন করুন এবং -u {username} -l ব্যবহার করুন নিচের মতো।
root@dev-db# crontab -u sathiya -l @monthly /home/sathiya/monthly-backup 00 09-18 * * * /home/sathiya/check-db-status
৫. Crontab এন্ট্রি কীভাবে এডিট করবেন?
কারেন্ট লগড-ইন ইউজারের Crontab এন্ট্রি এডিট করুন
একটি crontab এন্ট্রি এডিট করতে, crontab -e ব্যবহার করুন নিচের মতো। ডিফল্টভাবে এটি করেন্ট লগড-ইন ইউজারের crontab এডিট করবে।
ramesh@dev-db$ crontab -e @yearly /home/ramesh/centos/bin/annual-maintenance */10 * * * * /home/ramesh/debian/bin/check-disk-space ~ "/tmp/crontab.XXXXyjWkHw" 2L, 83C [দ্রষ্টব্য: এটি Vim এডিটরে crontab ফাইল ওপেন করবে এডিট করার জন্য। দ্রষ্টব্য cron একটি টেম্পোরারি /tmp/crontab.XX... তৈরি করেছে ]
যখন আপনি উপরের টেম্পোরারি ফাইলটি :wq দিয়ে সেভ করবেন, এটি crontab সেভ করবে এবং নিচের মেসেজ দেখাবে যা নির্দেশ করে crontab সফলভাবে মডিফাইড হয়েছে।
~ "crontab.XXXXyjWkHw" 2L, 83C written crontab: installing new crontab
রুট Crontab এন্ট্রি এডিট করুন
রুট ইউজার হিসেবে লগইন করুন (su – root) এবং crontab -e করুন নিচের মতো।
root@dev-db# crontab -e
অন্যান্য লিনাক্স ইউজারের Crontab ফাইল এন্ট্রি এডিট করুন
অন্যান্য লিনাক্স ইউজারের crontab এন্ট্রি এডিট করতে, রুট হিসেবে লগইন করুন এবং -u {username} -e ব্যবহার করুন নিচের মতো।
root@dev-db# crontab -u sathiya -e @monthly /home/sathiya/fedora/bin/monthly-backup 00 09-18 * * * /home/sathiya/ubuntu/bin/check-db-status ~ ~ ~ "/tmp/crontab.XXXXyjWkHw" 2L, 83C
৬. Cron ব্যবহার করে প্রতিমিনিট জব শিডিউল করুন।
আদর্শভাবে আপনার প্রতিমিনিট জব শিডিউল করার প্রয়োজন নাও হতে পারে। কিন্তু এই উদাহরণ বুঝলে নিচের অন্যান্য উদাহরণগুলো বুঝতে সহজ হবে।
* * * * * CMD
* মানে সব সম্ভাব্য ইউনিট — অর্থাৎ বছরের সব সময়ে প্রতিটি মিনিটে প্রতিটি ঘণ্টা। সরাসরি এই * ব্যবহার করার চেয়ে, আপনি নিচের কেসগুলোতে এটি খুব উপযোগী পাবেন।
- যখন আপনি মিনিট ফিল্ডে */5 নির্দিষ্ট করেন মানে প্রতি ৫ মিনিটে।
- যখন আপনি মিনিট ফিল্ডে 0-10/2 নির্দিষ্ট করেন মানে প্রথম ১০ মিনিটে প্রতি ২ মিনিটে।
- এভাবে উপরের কনভেনশন অন্যান্য ৪টি ফিল্ডের জন্যও ব্যবহার করা যায়।
৭. প্রতি ১০ মিনিটে ব্যাকগ্রাউন্ড Cron Job শিডিউল করুন।
নিচেরটি ব্যবহার করুন আপনি যদি প্রতি ১০ মিনিটে ডিস্ক স্পেস চেক করতে চান।
*/10 * * * * /home/ramesh/check-disk-space
এটি سال 내내 প্রতি ১০ মিনিটে নির্দিষ্ট কমান্ড check-disk-space এক্সিকিউট করে। কিন্তু আপনার প্রয়োজন হতে পারে কমান্ডটি শুধু অফিস আওয়ার্সে বা তার বিপরীতে এক্সিকিউট হোক। উপরের উদাহরণগুলো দেখায় কীভাবে সেটি করতে হয়।
৫টি ফিল্ডে ভ্যালু সপসিফাই করার বদলে, আমরা একটি সিঙ্গেল কীওয়ার্ড ব্যবহার করে সেটি সপসিফাই করতে পারি নিচের মতো।
কিছু স্পেশাল কেস আছে যেখানে উপরের ৫টি ফিল্ডের বদলে আপনি @ ফলোড একটি কীওয়ার্ড ব্যবহার করতে পারেন — যেমন reboot, midnight, yearly, hourly।
| Keyword | Equivalent |
|---|---|
| @yearly | 0 0 1 1 * |
| @daily | 0 0 * * * |
| @hourly | 0 * * * * |
| @reboot | Run at startup. |
৮. @yearly ব্যবহার করে প্রতি বছর প্রথম মিনিটে জব শিডিউল করুন
আপনি যদি চান একটি জব প্রতি বছর প্রথম মিনিটে এক্সিকিউট হোক, তবে আপনি @yearly cron কীওয়ার্ড ব্যবহার করতে পারেন নিচের মতো।
এটি সিস্টেম वार्षিক মেইনটেনেন্স annual-maintenance শেল স্ক্রিপ্ট ব্যবহার করে প্রতিবর্ষ জানুয়ারি ১ তারিখে রাত ০০:০০-এ এক্সিকিউট করবে।
@yearly /home/ramesh/red-hat/bin/annual-maintenance
৯. @monthly ব্যবহার করে প্রতিমাস শুরুতে Cron Job শিডিউল করুন
এটি উপরের @yearly-এর মতোই। কিন্তু কমান্ডটি মাসে একবার এক্সিকিউট করে @monthly cron কীওয়ার্ড ব্যবহার করে।
এটি tape-backup শেল স্ক্রিপ্ট প্রতি মাসের ১ তারিখে রাত ০০:০০-এ এক্সিকিউট করবে।
@monthly /home/ramesh/suse/bin/tape-backup
১০. @daily ব্যবহার করে প্রতিদিন ব্যাকগ্রাউন্ড জব শিডিউল করুন
@daily cron কীওয়ার্ড ব্যবহার করে, এটি cleanup-logs শেল স্ক্রিপ্ট ব্যবহার করে প্রতিদিন রাত ০০:০০-এ ডেইলি লগ ফাইল ক্লিনআপ করবে।
@daily /home/ramesh/arch-linux/bin/cleanup-logs "day started"
১১. @reboot ব্যবহার করে প্রতিটি রিবুটের পর লিনাক্স কমান্ড এক্সিকিউট করুন
@reboot cron কীওয়ার্ড ব্যবহার করে, এটি নির্দিষ্ট কমান্ডটি একবার এক্সিকিউট করবে মেশিন বুট হওয়ার পর প্রতিবার।
@reboot CMD
১২. MAIL কীওয়ার্ড ব্যবহার করে Crontab মেইল আউটপুট ডিজেবল/রিডাইরেক্ট করুন
ডিফল্টভাবে crontab জব আউটপুট যেই ইউজার জব শিডিউল করল সেটির কাছে পাঠায়। আপনি আউটপুট কোনো নির্দিষ্ট ইউজারের কাছে রিডাইরেক্ট করতে চাইলে, crontab-এ MAIL ভেরিয়েবল যোগ বা আপডেট করুন নিচের মতো।
ramesh@dev-db$ crontab -l MAIL="ramesh" @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space [দ্রষ্টব্য: MAIL ভেরিয়েবলসহ করেন্ট লগড-ইন ইউজারের Crontab]
আপনি যদি মেইল কোথাও পাঠাতে না চান, অর্থাৎ crontab আউটপুট ইমেইল করা বন্ধ করতে চান, তবে crontab-এ MAIL ভেরিয়েবল যোগ বা আপডেট করুন নিচের মতো।
MAIL=""
১৩. Crontab ব্যবহার করে প্রতি সেকেন্ডে লিনাক্স Cron Jobs এক্সিকিউট করুন
আপনি একটি every-second cronjob শিডিউল করতে পারবেন না। কারণ cron-এ আপনি নির্দিষ্ট করতে পারবেন ন্যূনতম ইউনিট হল মিনিট। একটি টিপিক্যাল সিনেরিওতে, অধিকাংশদের সিস্টেমে প্রতি সেকেন্ডে যেকোনো জব রান করার কোনো কারণ নেই।
১৪. Crontab-এ PATH ভেরিয়েবল সপসিফাই করুন
উপরের সব উদাহরণে আমরা লিনাক্স কমান্ড বা শেল-স্ক্রিপ্টের অ্যাবসোলিউট পাথ সপসিফাই করেছি যা এক্সিকিউট করতে হবে।
উদাহরণস্বরূপ, /home/ramesh/tape-backup সপসিফাই করার বদলে, আপনি শুধু tape-backup সপসিফাই করতে চাইলে, crontab-এ PATH ভেরিয়েবলে /home/ramesh পাথ যোগ করুন নিচের মতো।
ramesh@dev-db$ crontab -l PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/ramesh @yearly annual-maintenance */10 * * * * check-disk-space [দ্রষ্টব্য: PATH ভেরিয়েবলসহ করেন্ট লগড-ইন ইউজারের Crontab]
১৫. একটি Cron ফাইল থেকে Crontab ইনস্টল করুন
সরাসরি crontab ফাইল এডিট করার বদলে, আপনি সব এন্ট্রি আগে একটি cron-file-এ যোগ করতে পারেন। একবার আপনার সব এন্ট্রি ফাইলে থাকলে, আপনি সেগুলো আপলোড বা ইনস্টল করতে পারেন cron-এ নিচের মতো।
ramesh@dev-db$ crontab -l no crontab for ramesh $ cat cron-file.txt @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space ramesh@dev-db$ crontab cron-file.txt ramesh@dev-db$ crontab -l @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space
দ্রষ্টব্য: এটি cron-file.txt আপনার crontab-এ ইনস্টল করবে, যা আপনার পুরনো cron এন্ট্রিগুলোও রিমুভ করবে। তাই, cron-file.txt থেকে cron এন্ট্রি আপলোড করার সময় সতর্ক থাকুন।
অতিরিক্ত Cron টিউটোরিয়াল
- Cron Vs Anacron: লিনাক্সে Anacron সেটআপ করার পদ্ধতি (উদাহরণসহ)
- Cron কীভাবে প্রতি ৫ মিনিট, সেকেন্ড, ঘণ্টা, দিন, মাসে রান করবেন
- ৬টি লিনাক্স Crontab কমান্ড উদাহরণ
- ব্যাচ মোডে Cron Jobs ইনস্টল, এডিট, বা রিমুভ করার পদ্ধতি
- at, atq, atrm, batch কমান্ড বোঝা ৯ উদাহরণ দিয়ে
অসাধারণ লিনাক্স আর্টিকেল
নিচে কিছু অসাধারণ ১৫ উদাহরণ আর্টিকেল দেওয়া হলো যা আপনি উপকারী পেতে পারেন।
- মাম্মি, আমি পেলাম! — ১৫টি প্র্যাকটিক্যাল লিনাক্স Find কমান্ড উদাহরণ
- লিনাক্স কমান্ড লাইন হিস্টরি মাস্টার করার ১৫ উদাহরণ
- Unix LS কমান্ড: ১৫টি প্র্যাকটিক্যাল উদাহরণ
- Grep কে জorescence করুন! – ১৫টি প্র্যাকটিক্যাল Grep কমান্ড উদাহরণ