Product SiteDocumentation Site

9.7. جدولة المهام باستخدام cron وatd

cron هي الخدمة المسؤولة عن تنفيذ الأوامر المجدولة والمتكررة (يومياً، أسبوعياً، الخ)؛ أما atd فهي الخدمة التي تعالج الأوامر التي تنفذ مرة واحدة، لكن في لحظة محددة من المستقبل.
في نظام يونكس، هناك العديد من المهام التي تستدعى بانتظام:
افتراضياً، يستطيع جميع المستخدمون جدولة تنفيذ المهام. لكل مستخدم إذن crontab خاص به يستطيع فيه تسجيل الأوامر المجدولة. يمكن تحريره بالأمر crontab -e (تخزن محتوياته في الملف /var/spool/cron/crontabs/user).
يملك المستخدم الجذر crontab خاص به، لكنه يستطيع أيضاً استخدام الملف /etc/crontab، أو كتابة ملفات crontab إضافية في المجلد /etc/cron.d. يمتاز الحلان الأخيران بأنه يمكن فيهما تحديد هوية المستخدم التي سوف تستخدم عند تنفيذ الأوامر.
تتضمن الحزمة cron افتراضياً بعض الأوامر المجدولة التي يتم تنفيذها:
تعتمد العديد من حزم دبيان على هذه الخدمة: حيث تضمن من خلال وضع سكربتات الصيانة في هذه المجلدات العمل الأمثل لخدماتها.

9.7.1. صيغة ملف crontab

كل سطر فعلي من ملف crontab يصف أمراً مجدولاً باستخدام الحقول الستة (أو السبعة) التالية:
  • قيمة للدقائق (عدد يتراوح بين 0 و 59)؛
  • قيمة للساعات (عدد يتراوح بين 0 و 23)؛
  • قيمة لتاريخ اليوم من الشهر (من 1 إلى 31)؛
  • قيمة للشهر (من 1 حتى 12)؛
  • قيمة للنهار من الأسبوع (من 0 إلى 7، 1 يرمز لنهار الإثنين، ويرمز لنهار الأحد بالرقم 0 والرقم 7؛ من الممكن أيضاً استخدام الحروف الثلاثة الأولى من اسم اليوم بالإنكليزية، مثل Sun، أو Mon، الخ)؛
  • اسم المستخدم الذي ستنفذ الأوامر تحت هويته (في الملف /etc/crontab وفي الملفات المجزئة في المجلد /etc/cron.d/، لكن ليس في ملفات crontab الخاصة بالمستخدمين)؛
  • الأمر المراد تنفيذه (عند تحقق الشروط المعرفة في الحقول الخمسة الأولى).
كل هذه التفاصيل موثقة في صفحة الدليل crontab(5)‎.
يمكن تمثيل كل قيمة بشكل قائمة من القيم الممكنة (تفصل عن بعضها بفواصل). الصيغة a-b تمثل كل القيم الممكنة في المجال بين a وb. والصيغة a-b/c فتمثل المجال نفسه ولكن بزيادة قدرها c بين القيم (مثال: 0-10/2 يعني 0,2,4,6,8,10). أما النجمة * فهي محرف بديل، يمثل جميع القيم الممكنة.

مثال 9.2. عينة عن ملف crontab

#Format
#min hour day mon dow  command

# Download data every night at 7:25 pm
 25  19   *   *   *    $HOME/bin/get.pl

# 8:00 am, on weekdays (Monday through Friday)
 00  08   *   *   1-5  $HOME/bin/dosomething

# Restart the IRC proxy after each reboot
@reboot /usr/bin/dircproxy

9.7.2. استخدام الأمر at

ينفذ at أمراً في لحظة محددة من المستقبل. يأخذ at التاريخ والوقت المرغوبين كمتغيرات في سطر الأوامر، ويأخذ الأمر الذي يجب تنفيذه من الدخل القياسي. سوف يُنفَّذ الأمر كما لو أنه أدخل في الصدفة الحالية. حتى أن at يهتم بالحفاظ على البيئة الحالية، لإعادة توليد الشروط نفسها عند تنفيذ الأمر. يُكتَب الوقت وفق الأشكال المعتادة: يمثل كلاً من 16:12 أو 4:12pm الساعة 4:12 عصراً. يمكن تعريف التاريخ حسب عدة صيغ أوربية وغربية، منها DD.MM.YY (أي أن 27.07.15 تمثل 27 يوليو 2015)، YYYY-MM-DD (التاريخ السابق سيكتب بالشكل 2015-07-27MM/DD/[CC]YY (مثال، 12/25/15 أو 12/25/2015 سوف تمثل 25 ديسمبر 2015)، أو ببساطة MMDD[CC]YY (بحيث يمثل 122515 أو 12252015 التاريخ 25 ديسمبر 2015 أيضاً). إذا لم يحدد التاريخ، سوف يُنفّذ الأمر فور وصول الساعة إلى الوقت المحدد (من اليوم نفسه، أو اليوم التالي إذا كانت الساعة المحددة قد مضت من ذلك اليوم). يمكنك أيضاً كتابة ”today“ أو ”tomorrow“ ببساطة.
$ at 09:00 27.07.15 <<END
> echo "Don't forget to wish a Happy Birthday to Raphaël!" \
>   | mail lolando@debian.org
> END
warning: commands will be executed using /bin/sh
job 31 at Mon Jul 27 09:00:00 2015
هناك صيغة بديلة تستخدم لتأجيل التنفيذ لفترة محددة: at now + number period. يمكن أن تكون الفترة period دقائق (minutes)، أو ساعاتٍ (hours)، أو أياماً (days)، أو أسابيعاً (weeks). يبين العدد number ببساطة عدد الوحدات المذكورة التي يجب أن تنقضي قبل تنفيذ الأمر.
لإلغاء مهمة مجدولة باستخدام cron، استدع crontab -e ببساطة واحذف السطر الموافق في ملف crontab. أما بالنسبة لمهام at، فالعملية بنفس السهولة تقريباً: فقط استدع atrm task-number. يعطيك at رقم المهمة عند جدولتها، لكن يمكنك الحصول عليه ثانية باستخدام الأمر atq، الذي يعطي لائحة محدّثة بالمهام المجدولة.