cron
فهرست
مقدمه
ابزار cron یا cron-tab ابزاری برای زمانبندی اجرای برنامه ها در یک زمان و یا بازه زمانی خاص است. مثلا شما مشخص میکنید که در روز پنجشنبه ساعت 12 بعد از ظهر یک دستور خاص و یا یک مجموعه دستور در داخل یک فایل اسکریپت اجرا بشه. همچنین میتوانید مشخص کنید برنامه شما هر هفته در روز یکشنبه اجرا بشه.
زمانبندی با crontab
استفاده از کافیگ crontab. برای مقدمه باید بدونید که هر یوزر کانفیگ خودش را دارد، و هرچیزی که توسط یک یوزر کانفیگ شود، با دسترسی آن یوزر اجرا خواهد شد.
برای باز کردن فایل کانفیگ بهترین راه این است که از کامند
crontab -e
استفاده کنید.
راه دیگر هم ایجاد یک فایل در مسیر
/var/spool/cron/crontabs/
است. و باید این فایل به اسم یوزر باشد.
اما پیشنهاد من این است که فایل را مستقیم باز نکنید و از کامند استفاده کنید، چرا که استفاده از کامند ادیتور شما را بطوری تنظیم میکند که اگر دستوری را اشتباه تایپ کرده باشید، آن را قرمز و یا اگر درست تایپ شده باشد آن را سبز میکند.
سینتکس کانفیگ
هر سطر یک کانفیگ را نمایش میدهد. در هر سطر 6 ستون داریم. هر سطون با یک وایت-اسپس یا تب از ستون بعدیاش جدا میشود. پنج ستون اول از سمت چپ نماینده یک زمان معین است. ستون ششم تسک اجرایی را مشخص میکند.
به این شکل
#m h dom mon dow command
* * * * * /usr/bin/yes
فراموش نکنید که * به معنی ‘هر’ است. و این کانفیگ در هر دقیقه کامند yes را اجرا خواهد کرد.
از سمت راست به چپ، اولین ستون نشانده دهنده کامند اجرایی و یا فایل اسکریپت است.
ستون دوم از سمت راست نشان دهنده هفته است. این ستون عددی بین 0 تا 6 میگیرد که هر عدد یک روز هفته را مشخص میکند. عدد 0 روز یکشنه است.
برای مثال اگر بخواهید کامندی را هر دوشنبه یک بار اجرا کنید،
#m h dom mon dow command
0 0 * * 1 /usr/bin/cmd
ستون سوم از سمت راست نشان دهنده ماه است، این ستون عددی بین 1 تا 12 میگیرد که این عدد ماه خاصی را مشخص میکند. برای اجرای یک کامند در ماه اول سال به اینشکل عمل میکنیم
#m h dom mon dow command
0 0 * 1 * /usr/bin/tar -cf /media/bkp/archive-02.tar /home/
- ستون بعدی روز ماه را مشخص میکند، برای مثال عدد 6، روز ششم ماه را نشان میدهد. این ستون عددی بین 1 تا 31 میگیرد. مثلا بکاپ گرفتن از پوشه home در روز های ششم هر ماه.
#m h dom mon dow command
0 0 6 * * /usr/bin/tar -cf /media/bkp/archive-02.tar /home/
- ستون بعدی ساعت روز را مشخص میکند. ساعت عددی بین 0 تا 23 است، عدد 0 ساعت 00 است. برای مثال اجرای یک کامند در ساعت 23 روز شنبه
#m h dom mon dow command
0 23 * * 6 /usr/bin/ls > /var/log/list-of-file.log
و آخرین ستون از سمت راست نشانه دقیقه است، اجرای یک کامند در دقیقه 10 در ساعت 10 در روز دهم هر ماه
#m h dom mon dow command
10 10 10 * * /usr/bin/ls > /var/log/list-of-file.log
اگر بخواهید تسکی را هر ده دقیقه یک بار اجرا کنید یک راه این است که در ستون دقیقه از کاما استفاده کنید.
#m h dom mon dow command
0,10,20,30,40,50 * * * * /usr/bin/mkdir /tmp/dirName
و یا از ستاره و اسلش در کنار هم استفاده کنید.
#m h dom mon dow command
*/10 * * * * /usr/bin/mkdir /tmp/dirName
میانبر های زمانی
ابزار cron برای زمان هایی که زیاد استفاده میشوند سینتکس های میانبری تعریف کرده است. برای کانفیگ با میانبر ها فقط کافیه میانبر و بعد کامند را در دو ستون بنویسید. برای مثال
@reboot /usr/bin/rm -rf /tmp/tmp-bkp/
لیست میانبر ها
@reboot
کامند شما را بعد از هربار روشن شدن سیستم اجرا میکند
@yealy
هرسال یک بار کامند را اجرا میکند
@monthly
اجرای ماهانه کامند
@weekly
هر هفته یک بار این کامند اجرا میشود
@daily
هر روز یکبار کامند را اجرا میکند
@hourly
هر ساعت کامند ها را اجرا میکند
زمان بندی با دایرکتوری های کرون
ابزار
cron
مجموعه ای از دایرکتوری مشخص دارد که هر کدام نشان دهنده یک بازه زمانی خاص است.
این دایکتوری ها در
/etc/
قرار دارند.
/etc/cron.daily/
هر فایلی که در این دایرکتوری باشد، هر روز اجرا خواهند شد.
/etc/cron.hourly
فایل های این دایرکتوری در هر ساعت اجرا خواهند شد.
/etc/cron.monthly
همانطور که از مسیر مشخص است، فایل های این دایرکتوری هر ماه اجرا خواهند شد.
/etc/cron.weekly
فایل های این مسیر هم هر هفته اجرا خواهند شد.
- سعی کنید فایل ها را مستقیما به پوشه کپی نکنید، و بجای کپی آن ها را لینک کنید
مثال کاربردی
برای نمونه یک بکاپ هفته درست میکنیم.
اولین قدم این است که باید دستورات را در یک فایل bash ذخیره کنیم، و سپس آدرس فایل را به cron بدهیم تا آن را در بازه زمانی معین اجرا کند.
فایلی به اسم
weekly-bkp.sh
توی دایرکتوری
/var/scripts/
درست میکنیم.
سپس به فایل دسترسی اجرایی میدهیم،
chmod +x weekly-bkp.sh
درون فایل در خط اول یک هشبنگ مینویسیم، این کار باعث میشود تا فایل مسقیما با بش اجرا شود.
در خط دوم، یک متغیر تعریف میکنیم که مقدار آن تاریخ و ساعت سیستم است.
مقدار این متغییر از چپ به راست به این ترتیب است
روز ماه/ماه/سال-ساعت:دقیقه
مثلا
1/2/21-9:43
و در خط آخر فرایند بکاپ رو شروع میکنیم. این خط پوشه
home
را با
الگوریتم
lzma
فشرده میکند، و آن را در دایرکتوری
/media/backups/
ذخیره میکند،
و البته نام فایل را همان مقدار متغییر
NOW
قرار میدهد.
#!/usr/bin/bash
NOW=`date +'%d/%m/%y-%H:%M'`
tar --lzma -cf /home/ /media/backups/$NOW.7z.tar
بعد از ساخت اسکریپت، تنها باید
cron
را تنظیم کرد.
برای این کار با استفاده از دستور
crontab -e
وارد محیط کانفیگ
cron
میشویم. و یک سطر جدید ایجاد میکنیم، راحترین راه برای اجرای هفتهای یک تسک استفاده از میانبر ها است. پس از میانبر
@weekly
استفاده میکنیم.
#m h dom mon dow command
@weekly /var/scripts/weekly-bkp.sh
نکات
حتما سعی کنید در مسیر اجرای یک کامند، آدرس مطلق یا کامل آن را بنویسید. مثل
/usr/bin/tar
این کار برای این است که متغییر PATH در cron متفاوت است.علامت * در این ابزار به معنی هر است. در استفاده از این علامت دقت کنید.
فراموش نکنید که حتما فایل هایی که به cron برای اجرا میدهید، دسترسی اجرایی داشته باشند.