10 أمثلة لجدولة المهام باستخدام Cron


محمد أحمد العيل

يتكرّر أحيانا تنفيذ مهامّ وعمليات بحيث يستهلك إتمامها يدويا الكثير من الوقت. يمكن في هذه الحالة اللجوء إلى جدولة المهام لتنفيذها دوريّا في الخلفية، دون الحاجة للتدخل اليدوي، حسب معايير زمنية محدّدة مسبقا. سنرى في هذا المقال كيف يمكننا استخدام أداة Cron والأوامر المصاحبة لها من أجل تنفيذ إجراءات دوريا في الخلفية. يكثُر استخدام Cron لتنفيذ مهامّ النسخ الاحتياطي Backup، تحديث الحزم ومزامنة Synchronization الملفات؛ على سبيل المثال.

يقوم مبدأ عمل Cron على التحقق كلّ دقيقة من العناصر الموجودة في الجدول الخاصّ به (ملفّ)، ويُسمّى Crontab (اختصار لـCron table؛ جدول Cron). تحدّد عناصر Crontab المهامّ المُجدوَلة والمجالات الزمنية لتنفيذها.

ملحوظة: يُفعَّل Cron مبدئيا لجميع المستخدمين، فيحصُل كل مستخدم على جدول Cron خاصّ به؛ إلا أنه يمكن، عبر الملفّ etc/cron.deny/، تغيير هذا الإعداد وتقييد إمكانيّة جدولة المهامّ بالنسبة للمستخدمين.

توجد في ملفّ Crontab أسطر تتكوّن من ستة حقول يُفصل بينها بمسافة أو علامة جدولة (زرّ Tab في لوحة المفاتيح). تُمثّل الحقول الخمسة الأولى من الملفّ المجال الزمني لتنفيذ الأمر الموجود في الحقل السادس؛ وهي على النحو التالي (ابتداءً من اليسار):

  • الدقيقة: يأخذ هذا الحقل قيما عددية في المجال من 0 إلى 59.
  • الساعة: يأخذ قيما تتراوح بين 0 و23.
  • اليوم (في الشهر): يأخذ قيمة من 1 إلى 31.
  • الشهر: يأخذ قيمة عددية في المجال من 1 إلى 12؛ كما يمكن تحديد الأحرف الأولى من اسم الشهر (Jan وDec ليناير ودجمبر على التوالي).
  • اليوم (في الأسبوع): يأخذ قيمة في المجال من 0 إلى 6. يمثّل العدد 0 يوم الأحد، 1 الاثنين.. و6 السبت. كما يمكن تعيين الأحرف الثلاثة الأولى من اليوم (Wed مثلا بالنسبة ليوم الأربعاء).

بالنسبة للحقل السادس فهو - كما أسلفنا - الأمر الذي نريد تنفيذه في الوقت المحدّد عن طريق الحقول الزمنية السابقة.

  1. سرد المهامّ الموجودة في جدول Cron

    يُستخدَم الخيار l- مع الأمر crontab لسرد قائمة بأسطر (مهامّ) المستخدم الحالي المضبوطة في جدول Crontab:

    $ crontab -l
    00 10 * * * /bin/ls >/ls.txt

     

  2. التعديل على المهام المُجدولة

    يتيح الخيّار e- مع الأمر crontab التعديل على المهامّ المجدولة بتغيير إعداداتها في الملف Crontab:

     
    $ crontab -e
    

    يفتح الأمر جدول المهامّ بمحرّر النصوص المبدئي (أو يُظهر قائمة بالمحرّرات المتاحة للاختيار منها). يمكن بعدها تغيير الإعدادات ثم حفظ الملف.

  3. سرد المهام المجدولة لمستخدم

    يُحدّد الخيار u- المستخدم الذي نريد سرد مهامّه؛ وذلك على النحو التالي:

    $ crontab -u academy -l
    no crontab for academy

    يطلُب الأمر أعلاه سرد المهام المجدولة الخاصّة بالمستخدم academy، وتشير النتيجة إلى عدم وجود مهام مجدولة لهذا المستخدم.

    ملحوظة: لا يمكن لمستخدم عادي سرد مهام مستخدم آخر؛ لا تُتاح هذه الصلاحية سوى للمستخدم الجذر.

  4. حذف المهام المجدولة

    ينبغي الحذر عند استخدام الخيار r- مع الأمر crontab إذ أنه يحذف جميع المهام المجدولة، دون طلب تأكيد الأمر. أضف الخيار i-، الذي يطلُب تأكيد الحذف، بدلا من استخدام r- لوحده:

    $ crontab -i -r
    crontab: really delete academy's crontab?

     

  5. تخصيص المدة الزمنية باستخدام المحارف الخاصّة (*، -، / و#)

    تُستخدَم هذه المحارف لتخصيص الحقول الزمنية في أسطر جدول المهام:

    • يعني استخدام العلامة * في أحد الحقول الخمسة الأولى من السّطر أننا نريد تنفيذ الأمر مهما كانت قيمة هذا الحقل. مثلا؛ إن استُخدمت في الحقل الثاني فهذا يعني أن المطلوب تنفيذ الأمر بغض النظر عن الساعة.
    • تُستخدَم العلامة - لتعريف مجال بالنسبة للحقل. مثلا 9-0 في حقل الدقيقة تعني أن المطلوب تنفيذ الأمر في الدقائق من 0 إلى 9.
    • يُساعد الخط المائل / في تقسيم الحقل. مثلا 10/ في حقل الدقائق تعني كل عشر دقائق.
    • تفرّق الفاصلة , بين عناصر عدّة في نفس الحقل. مثلا؛ 1,3,5 في الحقل الخامس تعني أننا نريد تنفيذ المهمة أيام الاثنين، الأربعاء والخميس.
  6. جدولة المهام على مستوى النظام

    يُمكن لمديري الأنظمة استخدام مجلدات معدّة مسبقا لتنفيذ مهام على مستوى النظام. تُنفَّذ السكربتات الموجودة في المجلدات التاليّة -على الترتيب - مرة كلّ يوم، مرة كلّ ساعة، مرة في الشّهر ومرة في الأسبوع:

    /etc/cron.daily
    /etc/cron.hourly
    /etc/cron.monthly
    /etc/cron.weekly

    كما يُمكن استخدام المجلّد etc/cron.d/ لجدولة المهام بوضع ملفات تشبه في صيغتها Crontab؛ مع زيادة حقل، بعد الحقول الزمنية وقبل الأمر (ليصبح العدد الإجمالي للحقول سبعة)، للمستخدم الذي تُنفَّذ باسمه المهمة.

  7. تنفيذ أمر عند وقت معيَّن

    نستخدم في المثال أدناه الأمر crontab -e للتعديل على جدول المهام ثم نضيف سطرا جديدا لمهمة تحذف جميع الملفات الفارغة في المجلّد tmp/. تُنفَّذ المهمة يوميا عند الساعة 00 (منتصف الليل) و30 دقيقة.

    # crontab -e
    30 0 * * *   find /tmp -type f -empty -delete

     

  8. المدد الزمنية الشائعة

    يمكنك استخدام سلاسل المحارف التالية مكانَ الحقول الزمنية الخمسة

    سلسلة المحارف    العمل
    reboot@ تنفيذ الأمر عندما يعاد تشغيل النظام
    daily@ مرة في اليوم. يمكن أيضا استخدام @midnight للتنفيذ عند منتصف الليل.
    weekly@ مرة في الأسبوع.
    yearly@ مرة في السنة.
  9. تنفيذ أوامر عدّة

    تُستخدم العلامة && في حقل الأمر لتحديد أكثر من أمر للتنفيذ؛ مثلا:

    @daily command1 && command2

    يطلب السّطر السابق تنفيذ الأمر command1 وcommand2 يوميا.

  10. تعطيل إشعارات البريد

    يُرسل Cron مبدئيا رسائل بريد إلى المستخدم عند تنفيذ المهام المجدولة (في حال كان النظام الذي يعمل عليه قادرا على ذلك). يمكن تعطيل هذه الإشعارات بإضافة السطر التالي إلى Crontab (عن طريق الأمر crontab -e):

    * * * * * >/dev/null 2>&1

     

ترجمة - بتصرّف - لمقال 11 Cron Scheduling Task Examples in Linux لصاحبه Ravi Saive.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن