چگونه کارهارو توی لینوکس زمان بندی کنیم؟

خیلی وقت ها لازمه یه سری کارها اتوماتیک انجام بشن و نیاز به زمانبندی دارن. برای مثال فرض کنید میخواین سر یه ساعت خاص در روز یه گزارشی از فروش روز قبل رو برای یه سری افراد ارسال کنید یا اینکه آخر هم ما لاگ های ماه قبل رو آرشیو کنید. برای اینکار باید بک کار (Task) رو زمان بندی کنید تا در زمان مشخصی اجرا بشه. بهترین و در عین حال ساده ترین روش برای این کار استفاده از Cron هاست.

Cron چیست و چطور کار می کنه؟

کرون یه نرم افزار هست که به صورت یک سرویس در سیستم عامل های لینوکس و یونیکس قابل نصب هست. توی خیلی از توضیع های لینوکس مثل CentOS و Ubuntu به صورت پیشفرض کرون نصب هست و نیازی به نصب مجزا نیست چرا که خود لینوکس هم برای اجرای کارهایی که نیاز به اجرای مداوم داره از همین نرم افراز استفاده می کنه؛ ولی با این حال این امکان وجود داره تا از طریق Package Manager خود اون توضیع (برای مثال APT در Ubuntu و yum در CentOS) اون رو نصب یا به روز رسانی کنید.

بعد از نصب با استفاده از دستور crontab قادر خواهید بود جاب های خود را زمان بندی کنید.

کار با crontab

قبل از اینکه بریم سراغ نحوه استفاده از این دستور باید بگم که شما می‌تونید با استفاده از دستور man به مستندات هر دستوری توی لینوکس دسترسی داشته باشید. برای مثال man crontab. با وارد کردن این دستور تقریبا هر اصلاعاتی که در مورد crontab بخواهید رو خواهید دید.

برای ویرایش جاب های کرون باید از دستور crontab -e استفاده کنید. با زدن این دستور، ویرایشگر پیشفرض سیستم عامل (که در خیلی از موارد vIM هست) باز میشه. در نگاه اول شاید نحوه ایجاد کردن یه جاب خیلی پیچیده به نظر برسه ولی رفته رفته به این نتیجه میرسید که خیلی باحاله. در زیر یکی یک مثال ساده رو می‌بینید که هر ۱۰ دقیقه تاریخ جاری سیستم رو توی یک فایل چاپ می‌کنه:

*/۱۰ * * * *  date > current_date.txt

برای اینکه درک بهتره از نحوه نگارش هر جاب پیدا کنید لطفا به راهنمای زیر توجه کنید:

.---------------- minute (0 - 59)
|  .------------- hour (0 - 23)
|  |  .---------- day of month (1 - 31)
|  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
|  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
|  |  |  |  |
*  *  *  *  * user-name  command to be executed

هر جاب با عدد (یا ستاره) شروع میشه. عدد اول دقیقه هست که میتونه بین ۰ تا ۵۹ باشه؛ عدد دوم ساعت هست که میتونه بین ۰ تا ۲۳ باشه؛ عدد سوم روزهای ماه که میتونه بین ۱ تا ۳۱ باشه؛ عدد چهارم ماه هست که باید بین ۱ تا ۱۲ باشه و عدد آخر هم روز هفته هست که میتونه بین ۰ تا ۶ (یا مخفف روز هفته مثلا SAT برای شنبه و …) باشه.

مثال ها

اجرای یک دستور هر روز ساعت ۲ بعدازظهر:

۰ ۱۴ * * *  date > current_date.txt

هر دوشنبه:

۰ ۰ * * MON date > current_date.txt

هر ۳ ساعت یک بار:

۰ */۳ * * * date > current_date.txt

هر ماه:

۰ ۰ ۱ * * date > current_date.txt

همانطور که می‌بینید با این دستور هر دستوری رو توی هر زمانی که نیاز دارید می تونید اجرا کنید. بعد از اعمال تعییرات در crontab به سادگی فایل رو ذخیره کنید و ویرایشگر رو ببندید. زمان بندی برای شما انجا شده و در زمان تعیین شده اجرا خواهد شد. دقت کنید که هر کدام از زمان بندی هارو میتونید در یک خط مجزا در crontab -e وارد کنید و آنها به صورت مجزا اجرا خواهند شد.

در ضمن یه سایت crontab.guru یه سایت خوب هست که شامل اطلاعات و مثال‌های فراوانی برای استفاده هست که میتونید از اونها استفاده کنید (البته اگه هنوز فکر می کنید که نگارش crontab هنوز پیچیدست 😉

برای اینکه مطمئن باشید که زمان بندی شما با موفقیت ذخیره شده میتونید از دستور crontab -l استفاده کنید تا لیست جاب های زمان بندی شده رو ببینید.

به اشتراک بگذارید