آموزش Crontab
تهیه کننده: سعید زبردست
Cron چیست؟
Cron ابزاری (سرویسی؟) است که دستورات shell را به صورت دوره ای، بر اساس زمانبندی داده شده اجرا می کند. Cron بوسیله crontab گردانیده می شود. Crontab فایل پیکربندی ای است که جزییات دستورات و جدول زمانبندی در آن نگهداری می شود.
ساختن یک فایل crontab
برای ایجاد یک فایل crontab دستور زیر را در terminal وارد کنید:
crontab -e
با وارد کردن دستور بالا، ویرایشگر ترمینال (ویرایشگر پیش فرض در اوبونتو Nano است) به همراه یک بلوک جدید از فایل crontab (و یا crontab موجود، در صورتی که از قبل آن را داشته باشید) باز می شود. در این مرحله شما باید قبل از بستن ویرایشگر، دستوراتی را که قصد اجرای آن ها را دارید، با توجه به syntax (دستور زبان؟ نحو؟) ای که در ادامه توضیح داده شده است وارد کنید.
بعد از بستن ویرایشگر، برای مشاهده تمام crontab های فعال، دستور زیر را در ترمینال وارد نمایید:
crontab -l
دستور زبان Crontab
فایل crontab شش field (فیلد؟) معین به ترتیب دقیقه، ساعت، روز ماه (۱ تا ۳۱)، ماه، روز هفته (۰ تا ۶) و دستوری(دستوراتی) که باید اجرا شوند. در زیر فرم کلی این دستور را می بینید:
* * * * * command to be executed
- - - - -
| | | | |
| | | | +----- day of week (0 - 6) (Sunday=0)
| | | +------- month (1 - 12)
| | +--------- day of month (1 - 31)
| +----------- hour (0 - 23)
+------------- min (0 - 59)
مثال های crontab
نوشتن فایل crontab ممکن است برای اولین بار کمی گیج کننده به نظر برسد. بنابراین در زیر تعدادی مثال به همرا توضیح ارائه شده است:
* * * * * <command>
#هر دقیقه اجرا می شوند - Runs every minute
30 * * * * <command>
#هر ساعت رأس دقیقه ۳۰ ام اجرا می شوند - Runs at 30 minutes past the hour
45 6 * * * <command>
#هر روز ساعت ۶:۴۵ صبح اجرا می شوند - Runs at 6:45 am every day
45 18 * * * <command>
#هر روز صبح ساعت ۶:۴۵ بعد از ظهر اجرا می شوند - Runs at 6:45 pm every day
00 1 * * 0 <command>
#هر یکشنبه یاعت ۱ صبح(بامداد؟) اجرا می شوند - Runs at 1:00 am every Sunday
00 1 * * 7 <command>
#هر یکشنبه ساعت ۱ بامداد اجرا می شوند - Runs at 1:00 am every Sunday
00 1 * * Sun <command>
#هر یکشنبه ساعت ۱ بامداد اجرا می شوند - Runs at 1:00 am every Sunday
30 8 1 * * <command>
#اولین روز هر ماه ساعت ۸:۳۰ - Runs at 8:30 am on the first day of every month
00 0-23/2 02 07 * <command>
#Runs every other hour on the 2nd of July
علاوه بر مثال های بالا String های خاصی را می توان به کار برد:
@reboot <command> #هنگام بوت سیستم اجرا می شود - Runs at boot
@yearly <command> #هر سال اجرا می شود - Runs once a year [0 0 1 1 *]
@annually <command> #هر سال اجرا می شود - Runs once a year [0 0 1 1 *]
@monthly <command> #هر ماه اجرا می شود - Runs once a month [0 0 1 * *]
@weekly <command> #هر هفته اجرا می شود - Runs once a week [0 0 * * 0]
@daily <command> #هر روز اجرا می شود - Runs once a day [0 0 * * *]
@midnight <command> #هر روز اجرا می شود - Runs once a day [0 0 * * *]
@hourly <command> #هر ساعت اجرا می شود - Runs once an hour [0 * * * *]
اجرای چندین دستور
برای اجرای چندین دستور پی درپی، آنها را با استفاده از "&&" به صورت پی در پی بنویسید. مثال زیر ابتدا دستور command_01 و سپس دستور command_02 را در هر روز اجرا می کند:
@daily <command_01> && <command_02>
غیر فعال کردن اطلاع رسانی از طریق ایمیل
به صورت پیش فرض برنامه cron در هنگام اچرا کردن cronjob، یک ایمیل اطلاع رسانی به کاربر ارسال می کند. در صورتی که می خواهید این امکان را غیر فعال کنید، کافیست خط زیر را به آخر برنامه cron خود اضافه کنید:
>/dev/null 2>&1
مشخص کردن بک فایل مخصوص crontab برای استفاده
همانطور که پیش تر در بالای همین مطلب ذکر شد، شما می توانید با دستور "crontab -e" یک فایل crontab بسازید. به هر حال ممکن است شما از قبل یک فایل crontab داشته باشید. برای مشخص کردن فایل خود، دستور زیر را وارد کنید:
crontab -u <username> <crontab file>
سپس دستور زیر را وارد کنید(به جای Tux نام کاربری خود را بنویسید):
crontab -u tux ~/crontab
فایل crontab کاربر tux با نام crontab در پوشه خانگی آن ذخیره شد.
حذف کردن فایل crontab
برای حذف فایل crontab، دستور زیر را در ترمینال وارد کنید:
crontab -r
اجرا برنامه ها با واسط گرافیکی کاربر
برنامه هایی که شما می خواهید اجرا کنید به دو صورت هستند:
- برنامه هایی که دارای محیط گرافیکی کاربر هستند (GUI) و نیاز به تعامل با سرویس دهنده پنجره X هستند مانند مرورگر Firefox
- برنامه هایی که بدون GUI هستند که این برنامه ها خروجی و ورودی آن ها در پوسته خط فرمان است و برای اجرا شدن نیازی به تعامل با سرویس دهنده پنجره X ندارند. مانند برنامه ls یا gpg
برنامه هایی که در دسته دوم قرار می گیرند بدون هیچ مشکلی به وسیله Cron اجرا می گردند. اما برنامه های دستهٔ اول که دارای GUI هستند فقط با نوشتن دستور مورد نظر اجرا نخواهند شد. قبل از دستور باید به سرویس دهنده X بگویید که برنامه در کدام صفحه نمایش برای شما اجرا شود. برای این منظور قبل از دستور مورد نظر از env DISPLAY=:0 استفاده می کنیم. به عنوان مثال برای اجرای برنامه gedit در ساعت 10:25 هر روز صبح در فایل crontab دستور زیر را وارد می کنیم:
25 10 * * * env DISPLAY=:0 /usr/bin/gedit
DISPLAY=:0 به Cron می گوید که برنامه در صفحه جاری (desktop) اجرا شود.
و اگر دارای چندین صفحه نمایش هستید از دستور زیر استفاده می کنیم:
25 10 * * * env DISPLAY=:0.0 /usr/bin/gedit
DISPLAY=:0.0 به Cron می گوید که برنامه در صفحه نمایش اول و در صفحه جاری اجرا شود.
توجه: در اوبونتوی 9.10 (کارمیک) شما باید X ACL را برای localhost فعال کنید. برای این منظور از دستور زیر استفاده می کنیم:
xhost +local:
این دستور حتما باید قبل از اجرا شدن یک برنامه GUI به وسیله Cron اجرا شود. شما می توانید این دستور را در قسمت Startup Applications قرار دهید تا هنگام بوت شدن سیستم اجرا شود.
اطلاعات بیشتر
برای بدست آوردن اطلاعات بیشتر می توانید فایل manual مربوط به crontab را با استفاده از دستور زیر در ترمینال ببیند:
man crontab