طبق وعده ای که داده بودم می خواهم در مورد یک چیز باحال تو لینوکس صحبت کنم ، یه چیزی که اگه با خلاقیت همراه بشه کارهای وحشتناکی می شه انجام داد باهاش زبان درازی چیز خاصیم نیست، فقط یک نرم افزار مدیریت کار (Job) به نام CRON!

کاری که این نرم افزار واسه شما انجام میده تکرار یک سری کارها در زمان های بخصوصی هست که شما تعیین می کنید، یک مثال خیلی ساده اینکه مثلا می خواهیم هر هفته در ساعاتی که اینترنتمون ترافیک نامحدود داره (شب ها) اتوماتیک همه بسته ها لینوکس مون رو آپدیت کنه. مثال های باحال ریز و درشت تو وبلاگ دوستان گنو/لینوکسی فراوان هست ، شاید تو آینده یکی دو تا از اینجور کارها هم به ذهنم خودم رسید انجام دادم!

اول از همه بریم سراغ فعال کردن Cron برای این کار توی آرچ از دستور زیر استفاده می کنیم :

sudo systemctl enable cronie.service

 

خوب حالا شروع کنیم به نوشتن جدول کارهامون ، هر کاربر برای خودش می تونه یک جدول داشته باشه ، برای دسترسی به جدول اکانت خودتون از دستور زیر استفاده کنید :

crontab -e

احتیاجی به دسترسی ریشه هم وجود نداره !

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

* * * * *  دستورالعمل اجرایی
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ │
│ │ │ │ └───── day of week (0 - 6)
│ │ │ └────────── month (1 - 12)
│ │ └─────────────── day of month (1 - 31)
│ └──────────────────── hour (0 - 23)
└───────────────────────── min (0 - 59)

ارزش هر ستاره و مقدارهایی که میتونه بگیره در بالا توضیح داده شده دیگه بیشتر از این توضیح نمی دهم در عوض بیایم چند تا مثال عملی رو انجام بدیم.

به طور مثال فرض کنید می خواهیم همان چیزی که در مقدمه گفته شد رو پیاده سازی کنیم ، آپدیت کردن سیستم هر روز بعد از ساعت ۱ بامداد:

0 1 * * * pacman -Syu

(با فرض اینکه کاربر ریشه هستید و احتیاج به پسورد نداشته باشه اجرای دستور)

ممکن بعضی اوقات احتیاج داشته باشیم یک کار به طور دوره ای انجام بشه ، مثلا فرض کنید قصد داشته باشید هر یک ربع یکبار سایتی رو برای بررسی اینکه قسمت جدید از سریال مورد علاقه تون آماده دریافت هست یا نه چک کنید! حالا فرض کنید اون دستور تودرتو و پر از خلاقیتی که باعث چک کردن سایت میشه چیزی بیشتر از bang نباشه ، با این فرض به فایل crontab خودمون دستور زیر رو اضافه می کنیم:

*/15 * * * * bang

یه وقت هایی هم هست دوست داریم تو چند روز یا چند ساعت به خصوص انجام بشه کار ، مثلا فرض کنید می خواهیم در روزهای یکشنبه و جمعه برای چک کردن سریال دستور اجرا بشه :

* * * * San,Fri bang

برای روزهای هفته می تونید از اختصار های انگلیسی اون استفاده کنید مثل بالا ، دیدید که برای انتخاب چند روز هفته از ویرگول , استفاده کردم.

بعضی اوقات هم دستورات ترکیبی زیادی هست که دوست دارید در یک زمان مشخص اجرا بشه واسه همچین کاری بهتره در یک فایل مجزا اسکریپت شل خودتون رو بنویسید و به جاش اون فایل رو اجرا کنید (یادتون باشه قبلا مجوز اجرا رو با chmod بهش داده باشید !) :

* * * * * sh /path/to/file

 

راستی واحد زمان برای Cron دقیقه است یعنی نهایتا بتونید کاری رو هر دقیقه تکرار کنید (بعید می دونم کاری احتیاج باشه که هر ثانیه بخواهد اجرا بشه).و یک نکته جانبی دیگه اگر مثل من نمی تونید ارتباط دوستانه ای با vi داشته باشید می توانید ویرایش گر پیشفرض bash رو تغییر بدید به دلخواه خودتون :

export EDITOR=nano

البته اگر می خواهید تغییرات دائمی باشه باید این دستور رو در فایل ~/.bashrc بنویسید.

export EDITOR=nano >> ~/.bashrc

یک پیشنهاد خیلی خوب هم دارم برای یادگرفتن دستورات crontab و اون هم استفاده از این سایت هست ، برید و به صورت گرافیکی چند گزینه رو انتخاب کنید و نهایتا دستور نهایی رو نگاه کنید تا با ریزکاری های کار آشنا بشید !