cron، یک خداحافظی گرم

از چندسال پیش که systemd شروع به رشد کرد، سرویس یا به عبارت دقیقتر، دیمن(daemon) کرون به عنوان یک منشی اجرای دستورات در گنو/لینوکس کم اهمیّت تر شد. مخصوصا این که systemd/timer بسیار انعطاف پذیر تر و قطعا قدرتمندتر از cron هست. بویژه،اصلا یکی از مبانی آرچ تلقی میشه. من هم مدّتیه که دارم ازش بجای cron استفاده می کنم و cron رو کاملا کنار گذاشتم. اما باتوّجه به این که قبلا خاطرات شیرینی با cron دارم، تصمیم گرفتم ادای دینی کنم بهش و ستونی رو بهش اختصاص بدم. البته این فقط یک خلاصه سطحی از cron هست و درحقیقت cron در مدیریت و زمان بندی اجرای برنامه ها، قدرت عظیمی داره. آلترناتیوهای متعددی هم براش نوشته شده و من بین اون ها fcron رو که یکی از هم خانواده های خودش هست و البته نسبت به خود کرون کامل تر، ترجیح میدم. گرچه تفاوت بنیادینی باهم ندارن. وبگاه رسمی fcron اینجاست. اف-کرون، به دنبال فایل های fcrontab حاوی دستورات زمان بندی شده میگرده تا اونها رو اجرا کنه. برای شروع، باید ابتدا fcron را نصب کنید. در آرچ این کار به سادگی امکان پذیره. سپس دستورات

sudo systemctl enable fcron.service
sudo systemctl start fcron.service

رو بزنید تا سرویس fcron فعّال بشه و شروع به کار کنه.

حالا

fcrontab -e

را برای ویرایش فایل fcrontab خود وارد کنید. غالبا ادیتور پیشفرض fcrontab، ادیتور قدرتمند vim هست. من ترجیح میدم با ادیتور gedit کار کنم. در اینصورت توی ترمینال، ctrl+z رو میزنم تا crontabای که اجرا کرده بودم، stop بشه. توی ترمینال دستور

export EDITOR=gedit

رو بزنید و بعد دستور

fcrontab -e

رو وارد کنید. الان دیگه یه فایل text ساخته و با gedit هم باز شده. فرض کنید قراره دستور صوری command رو در موقع خاصّی اجرا کنیم. مقیاس های زمان برای cron دارای توالی طبیعی از کمتر به بیشتر هستن. بنابراین باید کد صوری

minute hour day month weekday command

رو برای جرای command در ویرایشگر ذخیره کنیم. البته توجّّه کنید که دقیقه(minute) ها از صفر تا ۵۹، ساعت(hour) ها از صفر تا ۲۳، روزهای هفته(weekday) از صفر تا ۶، روزهای ماه(day) از یک تا ۳۱ و ماه(month) های سال از یک تا ۱۲ اندیس گذاری شدن. بنابراین مثلا عدد ۱ برای ماه هایعنی ماه اول و برای دقیقه ها یعنی دقیقه دوّم. ضمنا اگر مثلا بجای نوشتن عدد ۱ در جایگاه ماه، از * استفاده کنیم، cron دستور command رو در تمام ماه ها اجرا می کنه. استفاده از * در جایگاه های دیگر مقیاس های زمان، معنی مشابهی داره.

دقت کنید که 0 و 7 هردو برای یکشنبه بکار میرن و بنابراین مثلا عدد سه شنبه میشه ۲.

میشه فیلدهای بالا رو به انواع مختلف دیگه ای هم پر کرد. مثلا دستور

*/5 * * * * command

یعنی هر ۵ دقیقه، دستور

* 5,19 * * * command

یعنی ساعت ۵ و ساعت ۱۹، دستور

* * 7,19,28 * * command

یعنی روزهای هفتم، نوزدهم و بیست و هشتم، دستور

* * * 1,5,8 * command

ماه اوّل، پنجم و هشتم و دستور

* * * * 0,1,3 command

روزهای یکشنبه، دوشنبه و چهارشنبه دستور صوری command رو اجرا می کنن. حتی حالت های بالا رو میشه با هم تلفیق کرد.

هر دستور رو که قرار هست cron در موقع خاصی اجرا کنه، باید در یک خط جدید نوشت. میشه قبل از هر دستور، یک توضیح برای اون خط هم نوشت که کاربر با مراجعه به این فایل متنیfcrontab، مشروح کاری رو که fcron قراره انجام بده، ببینه. این توضیح رو جلوی یک # قرار بدید تا تبدیل به یک “توضیح” بشه.

هم چنین، دستور

crontab -l

تمام دستوراتی رو که کاربر جاری به cron داده تا اجرا بشن، لیست می کنه. دستور

crontab -r

هم فایل متنی رو که وظایف cron در اون مشخص شدن، پاک می کنه.

مثال ۱)

من میخوام در ساعت ۹:۶ دقیقه شب سه شنبه سی تیر ( ۲۱ ام برج ۷ میلادی) کار قشنگ یکی از محبوب ترین خواننده هام رو دانلود کنم. بنابراین، در فایل fcrontabی که با ویرایشگر بازش کردم، کد زیر رو ذخیره می کنم.

5 21 21 7 2 /usr/bin/wget http://up.myactmusic.com/93/khordad/Ghasem%20Afshar%20-%20Zanjiri.mp3

مثال ۲)

سپردن برنامه هایی که برای اجرا شدن حتما به X نیاز دارن به fcron، کمی متفاوته. مثلا ذخیره کردن کد

* * * * * DISPLAY=:0 /usr/bin/vlc

توی fcrontab باعث میشه تا برنامه vlc هر دقیقه یک بار اجرا بشه( درحقیقت، DISPLAY متغیّری هست که ملزم می کنه ابزارهای X11 روی چه صفحه ای اجرا بشن. مثلا خروجی دستور

echo $DISPLAY

برای من 0 بود که اون رو توی کد بالا قرار دادم. برنامه هایی مثل vlc و firefox حتما باید درحضور X اجرا بشن).

میتونم سفارش بیشتری هم به fcron بدم. مثلا ذخیره کردن کد

5 21 21 7 2 DISPLAY=:0 /usr/bin/vlc /home/arcush/Music/Shajarian/1-Asemane\ Eshgh/TRACK01.mp3 
15 21 21 7 2 DISPLAY=:0 /usr/bin/firefox google.com

توی fcrontab، باعث میشه vlc موسیقی ای رو که آدرسش رو بهش دادم، در زمان مشخص شده، پخش کنه. به اضافه اینکه ده دقیقه بعد، مرورگر firefox سایت گوگل رو باز کنه ( مشابه ابزارک هایی مثل && هم قابل استفاده هستند).

مثال ۳)

میتونیم اسکریپت های اجرایی رو هم به fcrontab بسپاریم تا سر موعد خاصّی اجراشون کنه. مثلا ابتدا متن

#!/bin/sh
export DISPLAY=:0
/usr/bin/firefox google.com

رو توی یه فایل با اسم test.sh ذخیره کنید( البته با دستور

cat /etc/shells

مطمین بشید که کاربر جاری روی شل sh هم تنظیم شده باشه که معمولا شده). بعد در ترمینال به آدرس فایل برید و به اون مجوّز اجرایی بدید:

chmod +x test

حالا

fcrontab -e

رو بزنید و

15 21 21 7 2 bash /home/arcush/Desktop/test.sh

رو داخلش ذخیره کنید( آدرس فایل در کامپیوتر خودتون رو بجای آدرس بالا قرار بدید) که در زمان مشخص شده، اسکریپتی رو که بهش آدرس داده شده، اجرا خواهد کرد.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *