جزییات بازدید : 13229
تاریخ انتشار : 17 / مرداد / 1397
crontab برای اجرای task های خاص در یک دوره زمانی منظم استفاده می شود. crontab مشابه task schedule ویندوز می باشد. crontab برای انجام task های روتینی مثل اسکن سیستم ، پشتیبان گیری روزانه استفاده می شود . job ها توسط crontab در بک گراند سیستم در زمان و دوره ی مشخصی اجرا می شود. در این آموزش شما crontab را با 20 مثال کاربردی و مفید یاد خواهید گرفت . شما می توانید از crontab به منظور اجرای یکبار یک task در آینده نیز استفاده کنید ولی پیشنهاد می شود برای اینکار از دستور at در لینوکس استفاده کنید.
Linux Crontab Syntax
Crontab شامل شش فیلد می باشد . فیلدهای 1 الی 5 تاریخ و زمان اجرا را تعیین می کنند و فیلد ششم برای دستور یا اسکریپتی که باید اجرا شود به کار می رود . سینتکس crontab به شکل زیر است :
[command] [Day_of_the_Week] [Month_of_the_Year] [Day_of_the_Month] [hour] [Minute]
- ستاره به معنی همه موارد است
- شما میتوانید با استفاده از - بازه نیز تعریف کنید مثلا 10-1 یا 30-20 یا sun-fri یا feb-apr
- شما می توانید چندین بازه نیز تعریف کنید مثلا jan-mar, jul-sep
چگونه در crontab موردی اضافه یا ویرایش کنم
برای اضافه یا بروزرسانی job در crontab از دستور زیر استفاده کنید. این دستور crontab را در ویرایشگری به منظور افزودن یا ویرایش باز می کند.
$ crontab -e
به صورت پیش فرض دستور بالا crontab را برای کاربری که لاگین کرده باز می کند برای باز کردن crontab سایر کاربرها (مجاز برای ادمین ها) می توانید از دستوری زیر استفاده کنید
#crontab -u username -e
در صورت تمایل به تغییر ویرایشگر می بایست متغیر محیطی EDITOR را تغییر دهید.
چگونه crontab را لیست کنیم
برای مشاهده آیتم های crontab برای کاربر جاری از دستور زیر استفاده کنید
$crontab -l
از آپشن u- که در ادامه آن نام کاربر می آید میتوانید آیتم های مربوط به یک کاربر خاص را مشاهده کنید
$crontab -u username -l
20 مثال کاربردی crontab
1- زمانبندی cron برای اجرای روزانه ساعت 2 صبح
این مورد برای پشتیبان گیری روزانه از دیتابیس بسیار مفید است.
0 2 * * * /bin/sh backup.sh
2- زمانبندی یک cron برای اجرای دو بار در هر روز
در مثال زیر دستور هر روز در ساعت 5 صبح و 5 عصر اجرا می شود . شما میتوانید با استفاده از کاما ساعات دیگری هم اضافه کنید.
0 5,17 * * * /scripts/script.sh
3- زمانبندی یک cron برای اجرا در هر دقیقه
کلا شما خیلی کم نیاز به اجرای یک دستور در هر دقیقه خواهید داشت ولی چنانچه نیاز دارید اسکریپت در هر دقیقه اجرا شود به صورت زیر عمل کنید
* * * * * /scripts/script.sh
4-زمانبندی cron برای اجرا در هر یکشنبه ساعت 5 عصر
این نوع از cron برای task های هفتگی مناسب است مانند log rotation
0 17 * * sun /scripts/script.sh
5- زمانبندی cron برای اجرا هر 10 دقیقه
چنانچه میخواهید یک task را در فواصل زمانی 10 دقیقه ای اجرا کنید به شکل زیر عمل کنید این نوع از cron مناسب عملیات مانیتورینگ می باشد.
*/10 * * * * /scripts/monitor.sh
6- زمانبندی cron برای اجرا در ماههای انتخابی
گاهی اوقات نیاز داریم تا اسکریپت ما در ماههای خاصی اجرا شود . در مثال زیر اسکریپت در ماههای ژانویه ، می و آگوست اجرا می شود.
* * * jan,may,aug * /script/script.sh
7- زمانبندی cron برای اجرا در روزهای انتخابی
چنانچه شما بخواهید اسکریپت شما فقط در روزهای خاصی اجرا شود به صورت زیر عمل کنید . اسکریپت زیر در روزهای یکشنبه و جمعه ساعت 5 عصر اجرا می شود.
0 17 * * sun,fri /script/script.sh
8- زمانبندی یک cron برای اجرا در اولین یکشنبه هر ماه
برای زمانبندی یک اسکریپت به منظور اجرا در اولین یکشنبه هر ماه فقط پارامترهای زمانی کافی نیست . میبایست در فیلد دستور تغییراتی اعمال کنید تا به هدف خود برسید.
0 2 * * sun [ $(date +%d) -le 07 ] && /script/script.sh
9- زمانبندی یک cron برای اجرا هر 4 ساعت
چنانچه می خواهید اسکریپت شما در فواصل زمانی 4 ساعت اجرا شود به شیوه زیر عمل کنید
0 */4 * * * /scripts/script.sh
10- زمانبندی یک cron برای اجرا دوبار در هر یکشنبه و دوشنبه
برای اجرای یک task دوبار در روزهای یکشنبه و دوشنبه به شیوه زیر عمل کنید
0 4,17 * * sun,mon /scripts/script.sh
11- زمانبندی یک cron برای اجرا در هر 30 ثانیه
برای زمانبندی یک task به طوری که هر 30 ثانیه یکبار اجرا شود صرفا پارامترهای زمانی کافی نیست اما میتواند توسط دوبار اجرای یک cron مشابه مانند مثال زیر انجام پذیرد.
* * * * * /scripts/script.sh * * * * * sleep 30; /scripts/script.sh
12-زمانبندی چندین task در یک cron
شما می توانید با جداسازی task ها بوسیله سمی کالون این کار را انجام دهید
* * * * * /scripts/script.sh; /scripts/script2.sh
13- زمانبندی task ها برای اجرا به صورت سالیانه (yearly@)
yearly@ معادل "* 1 1 0 0" است یعنی دقیقه اول روز اول از ماه اول هر سال. این مورد برای فرستادن تبریک سال نو مناسب است
@yearly /scripts/script.sh
14-زمانبندی task ها برای اجرا به صورت ماهانه
monthly@ معادل "* * 1 0 0 " است یعنی دقیقه اول هر ماه اجرا می شود . این برای کارهای ماهیانه مانند پرداخت صورتحساب و فاکتورها مناسب است.
@monthly /scripts/script.sh
15- زمانبندی task ها برای اجرا به صورت هفتگی
weekly@ در دقیقه اول هر هفته اجرا میشود
@weekly /scripts/script.sh
16- زمانبندی task ها برای اجرا به صورت روزانه
daily@ معادل "* * * 0 0" است یعنی اولین دقیقه از هر روز اجرا شود . این مورد برای کارهای روزانه مفید است.
@daily /scripts/script.sh
17- زمانبندی task ها برای اجرا به صورت ساعتی
hourly@ معادل "* * * * 0 " است یعنی اولین دقیقه هر ساعت اجرا می شود.
@hourly /scripts/script.sh
18-زمانبندی task ها برای اجرا در هنگلم ریبوت شدن سیستم
reboot@ برای زمانی که میخواهید task ی در استارت آپ سیستم اجرا شود بسیار مفید است. مشابه اسکریپت های استارت آپ است .
@reboot /scripts/script.sh
19- ریدارکت کردن نتایج cron به ایمیل مشخصی
به صورت پیش فرض cron جزئیات را برای کاربر جاری که زمانبندی را انجام داده است ارسال می کند . چنانچه تمایل دارید به کاربر دیگری ارسال شود نیازمند تنظیم متغیر MAIL به صورت زیر می باشید
#crontab -l
MAIL=bob
0 2 * * * /script/backup.sh
20- گرفتن پشتیبان از همه ی cron ها در داخل یک فایل متنی ساده
پیشنهاد من اینست که از همه job های موجود در cron یک پشتیبان تهیه کنید بدین شکل امکان بازیابی cron ها در اثر حذف تصادفی وجود خواهد داشت.
بررسی cron های فعلی
# crontab -l
MAIL=rahul
0 2 * * * /script/backup.sh
تهیه پشتیبان از cron درون یک فایل متنی
# crontab -l > cron-backup.txt
# cat cron-backup.txt
MAIL=rahul
0 2 * * * /script/backup.sh
حذف cron های جاری
# crontab -r
# crontab -l
no crontab for root
بازیابی cron ها از فایل متنی
# crontab cron-backup.txt
# crontab -l
MAIL=rahul
0 2 * * * /script/backup.sh
مترجم : حسین داود
منبع :
https://tecadmin.net/crontab-in-linux-with-20-examples-of-cron-schedule