cron ابزاری برای کمک به ما در انجام وظایف بصورت خودکار میباشد. مثلا به ما در تهیه پشتیبان از فایل ها و دایرکتوری های مورد نظر در ساعت های استراحت شبکه که مسلما ما هم در استراحت هستیم یاری میدهد تا مدیران شبکه با خیالی آسوده به استراحت بپردازند.(خوابهای خوب ببینید ).اشتباه نکنید وظیه cron تهیه پشتیبان برای ما نیست بلکه اجرای پروسه ی پشتیبانگیری یا هر پروسه ی دیگری در ساعت و زمان از پیش تعیین شده میباشد.
دستورات و قوانین cron در حالت پیش فرض در (crontab(cron table که در /etc/قرار دارد ذخیره میشود ولی هر کاربر میتواند crontab مربوط به خودش را داشته باشد که در /var/spool/cron/ ذخیره میشود.
برای ویرایش crontab یه کاربر کافیست به راحتی با کاربر مورد نظر به سیستم وارد شده و در ترمینال
#crontab -e
را تایپ کنیم.
ویرایشگر پیش فرض برای crontab -e ویراشگر vi میباشد که بعضی از دوستان از جمله خود من در کار کردن با این ویرایشگر دچار مشکل هستن پس اگر شما تمایل یه تعویض حالت پیش فرض رو دارید کافیست بدین ترتیب عمل کنید
#export VISUAL='youreditor' (I recommend jed,ee or nano)
چند نمونه از دستوراتی که در crontab استفاده میکنیم
12 3 * * * root tar cfz /reza/backup.tar.gz /etc >> /dev/null 2>&1
52 5 * * * root /usr/local/src/analog-5.3.2-1h/analog >> /dev/null 2>&1
*/15 * * * * root echo "are you alive?..lol"
مورد اول برای گرفتن پشتیبان از /etc/
مورد دوم برای اجرای برنامه analog جهت محاسبه آمار وب سرور می باش
مورد سوم برای فرستادن پیغام به کاریر root هر از 15 دقیق میباشد
ما اینجا برای نوشتن دستورات crontab تعداد 7 فیلد داریم که به ترتیب زیر نوشته میشوند
1 2 3 4 5 6 71-Minute(0-59)
2-Hour(0-23)
3-DayofMonth(1-31)
4-Month(1-12 or Jan,Dec,etc)
5-DayofWeek(0-6(0=sunday) or sun,sat,etc)
6-User
7-Command1=*/15 2=* 3=* 4=* 5=* 6=root 7=echo "are you alive?..lol"
12 3 * * * root tar cfz /reza/backup.tar.gz /etc >> /dev/null 2>&1
30 15 7 10 0 * root echo "happy birthday,reza!!"
30 15 7 Oct Sun * root echo "happy birthday,reza!!"
15 * * * * reza echo "nuclear weapon is our right!!"
*/15 * * * * reza echo "nuclear weapon is our right!!"
0 */2 * * * reza echo "nuclear weapon is our right!!"
با اقزودن ' , ' در یک فیلد امکان چندین مرتبه اجرا شدن دستور مورد نظر بدست میاد.مثلا برای اجرای دستور در 15 و 30 دقیقه گذشته از هر ساعت بدین طریق عمل میکنیم :
15,30 * * * * reza echo "nuclear weapon is our right!!"
برای اجرای دستور مورد نظر در یک زمان مشخص برای اولین هفته ماهی که شما تمایل دارید در فیلد روز از 7-1 استفاده میکنیم
15,30 */2 1-7 * * reza echo "horray,west world will bycott us!!"
یک سری علایم در نوشتن ورودی cron استفاده میشود که من سعی میکنم با مثال توضیح بدم(من تو عمرم انشا ننوشتم پس اگه میبینید نگارشم خوب نیست,ببخشید دیگه!!هدفم مهمه)
* برای نادیده گرفتن اون فیلد در نظر گرفته شده,یعنی اگر مثلا در فیلد ساعت بود بدون توجه به این فیلد سر هر ساعت دستور اجرا میشود و یا اگر در فیلد دقیقه بود سر هر دقیقه و ….
, (کاما) در هر فیلد که احتیاج داریم چندین بار دستور در ساعات مختلف اجرا بشود کاربرد دارد مثلا در فیلد دقیقه 15,30 به معنای اجرا در دقیقهای 15 و 30 یا در فیلد ساعت 2,9 به معنای اجرا در ساعتهای 9 و 2 میباشد و….
- برای تعیین یک بازه زمانی مثلا در فیلد روزهای ماه اگر بیخواهیم بین روزهای 8 تا 15 دهم ماه دستور اجرا بشود بدین صورت مینویسیم 15-8 و….
سه نشانه بالا برای استفاده در فیلدهای 5-1 در نظر گرفته شده ولی نشانه زیر برای فیلد شماره 7
% در فیلد 7 برای نشان دادن خروجی در خط بعدی کاربرد دارد مثلا
echo %reza %persianadmins %behroozi
به جای نمایش بصورت reza persianadmins behroozi بدین ترتیب نمایش داده میشود
rezapersianadminsbehroozi
run-parts
برای اجرای یک مجموعه اسکریپت در زمان مشخص از run-parts استفاده میکنیم.مثال زیر اسکرپیت های قرار گرفته در /home/reza/cron/ را در ساعت 4:18 بعد از ظهر اجرا خواهد کرد
18 16 * * * reza run-parts /home/reza/cron >> /dec/null 2>&1
ثبت خروجی دستورات در cron
برای انجام اینکار میبایست بجای dev/null از چیزی شبیه به مثال پایین استفاده کنیم
30 4 * * * root ls -s /reza/web >> /reza/webdirlist.log 2>&1
نکته»
اگر بجای << از < استفاده کردید در هر دفعه جرا شدن دستور و فرستادن خروجی به فایل مریوطه ,محتویات فایل پاک و خروجی حدید جایگزین میشود ولی با استفاده از << خروجی به انتهای فایل افزوده خواهد شد.
برای لیست کردن jobهایی که با crontab -e اضافه کردیم میتوانیم با استفاده از دستور زیر cron jobها رو لیست کنیم
#crontab -l
برای پاک کردن یک crontab از دستور زیر استفاده میکنیم
#crontab -r
برای ویرایش crontab یک کاربر از طریق کاربر root بدین طریق عمل میکنیم
#crontab -e -u username
تا اینجا دیدید که برخلاف ظاهر پیچیده crontab به آسانی تنظیم میشود و تقریبا ابزاری کاربردی و مهم در فرآیند مدیریت سیستم میباشد.
برای استفاده از cron باید از crontab جهت load کردن jobها استفاده کرد که برای این منظور 2 راه پیش رو داریم :
1-استفاده از crontab -e ,یعنی مستقیما دستور مربوط رو در crontab مینویسیم
2-از طریق فایل یعنی ابتدا یک فایل متنی میسازیم و طبق قوانین توضیح داده شده در بالا وروی مناسب با شرایط خودتون رو در فایل مورد نظر قرار داده و سپس Load میکنیم
قبل از Loadبا استفاده از crontab -l لیست jobهای جاری رو تهیه میکنیم و هر کدام رو که لازم داریم در فایل جدید مینویسیم چون با load این فایل تمامی jobهای گذشته پاک خواهند شد .
با مثال ادامه میدهیم
#touch /reza/mycrontab
#echo "30 4 * * * ls -s /reza/web >> /reza/webdirlist.log 2>&1" > /reza/mycrontab
#crontab -u reza /reza/mycrontab
#crontab -l
MAILTO="username"
@reboot /path/to/my/program@reboot updatedb
string meaning
—— ———–
@reboot Run once, at startup.
@yearly Run once a year, "0 0 1 1 *".
@annually (same as @yearly)
@monthly Run once a month, "0 0 1 * *".
@weekly Run once a week, "0 0 * * 0".
@daily Run once a day, "0 0 * * *".
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *".
#at time(23:30,4pm,etc)#at 4pm#at 4pm + 3 days#at 4pm Jul 31#at 4pm tomorrow
at> ls -l /etc > /reza/ls.etc
job 7 at 2007-03-24 17:00
#atrm X(jobID)#at -d X
#atq#at -l
#touch /reza/myat#echo "cp /var/www/php /reza/www/php"#at -f /reza/myat 4pm + 3 days
هیچ نظری موجود نیست:
ارسال یک نظر