يتكرّر أحيانا تنفيذ مهامّ وعمليات بحيث يستهلك إتمامها يدويا الكثير من الوقت. يمكن في هذه الحالة اللجوء إلى جدولة المهام لتنفيذها دوريّا في الخلفية، دون الحاجة للتدخل اليدوي، حسب معايير زمنية محدّدة مسبقا. سنرى في هذا المقال كيف يمكننا استخدام أداة 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 مثلا بالنسبة ليوم الأربعاء).
بالنسبة للحقل السادس فهو - كما أسلفنا - الأمر الذي نريد تنفيذه في الوقت المحدّد عن طريق الحقول الزمنية السابقة.
-
سرد المهامّ الموجودة في جدول Cron
يُستخدَم الخيار
l-
مع الأمرcrontab
لسرد قائمة بأسطر (مهامّ) المستخدم الحالي المضبوطة في جدول Crontab:$ crontab -l 00 10 * * * /bin/ls >/ls.txt
-
التعديل على المهام المُجدولة
يتيح الخيّار
e-
مع الأمرcrontab
التعديل على المهامّ المجدولة بتغيير إعداداتها في الملف Crontab:$ crontab -e
يفتح الأمر جدول المهامّ بمحرّر النصوص المبدئي (أو يُظهر قائمة بالمحرّرات المتاحة للاختيار منها). يمكن بعدها تغيير الإعدادات ثم حفظ الملف.
-
سرد المهام المجدولة لمستخدم
يُحدّد الخيار
u-
المستخدم الذي نريد سرد مهامّه؛ وذلك على النحو التالي:$ crontab -u academy -l no crontab for academy
يطلُب الأمر أعلاه سرد المهام المجدولة الخاصّة بالمستخدم
academy
، وتشير النتيجة إلى عدم وجود مهام مجدولة لهذا المستخدم.ملحوظة: لا يمكن لمستخدم عادي سرد مهام مستخدم آخر؛ لا تُتاح هذه الصلاحية سوى للمستخدم الجذر.
-
حذف المهام المجدولة
ينبغي الحذر عند استخدام الخيار
r-
مع الأمرcrontab
إذ أنه يحذف جميع المهام المجدولة، دون طلب تأكيد الأمر. أضف الخيارi-
، الذي يطلُب تأكيد الحذف، بدلا من استخدامr-
لوحده:$ crontab -i -r crontab: really delete academy's crontab?
-
تخصيص المدة الزمنية باستخدام المحارف الخاصّة (
*
،-
،/
و#
)تُستخدَم هذه المحارف لتخصيص الحقول الزمنية في أسطر جدول المهام:
-
يعني استخدام العلامة
*
في أحد الحقول الخمسة الأولى من السّطر أننا نريد تنفيذ الأمر مهما كانت قيمة هذا الحقل. مثلا؛ إن استُخدمت في الحقل الثاني فهذا يعني أن المطلوب تنفيذ الأمر بغض النظر عن الساعة. -
تُستخدَم العلامة
-
لتعريف مجال بالنسبة للحقل. مثلا9-0
في حقل الدقيقة تعني أن المطلوب تنفيذ الأمر في الدقائق من0
إلى9
. -
يُساعد الخط المائل
/
في تقسيم الحقل. مثلا10/
في حقل الدقائق تعني كل عشر دقائق. -
تفرّق الفاصلة
,
بين عناصر عدّة في نفس الحقل. مثلا؛1,3,5
في الحقل الخامس تعني أننا نريد تنفيذ المهمة أيام الاثنين، الأربعاء والخميس.
-
يعني استخدام العلامة
-
جدولة المهام على مستوى النظام
يُمكن لمديري الأنظمة استخدام مجلدات معدّة مسبقا لتنفيذ مهام على مستوى النظام. تُنفَّذ السكربتات الموجودة في المجلدات التاليّة -على الترتيب - مرة كلّ يوم، مرة كلّ ساعة، مرة في الشّهر ومرة في الأسبوع:
/etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly
كما يُمكن استخدام المجلّد
etc/cron.d/
لجدولة المهام بوضع ملفات تشبه في صيغتها Crontab؛ مع زيادة حقل، بعد الحقول الزمنية وقبل الأمر (ليصبح العدد الإجمالي للحقول سبعة)، للمستخدم الذي تُنفَّذ باسمه المهمة. -
تنفيذ أمر عند وقت معيَّن
نستخدم في المثال أدناه الأمر
crontab -e
للتعديل على جدول المهام ثم نضيف سطرا جديدا لمهمة تحذف جميع الملفات الفارغة في المجلّدtmp/
. تُنفَّذ المهمة يوميا عند الساعة 00 (منتصف الليل) و30 دقيقة.# crontab -e 30 0 * * * find /tmp -type f -empty -delete
-
المدد الزمنية الشائعة
يمكنك استخدام سلاسل المحارف التالية مكانَ الحقول الزمنية الخمسة
سلسلة المحارف العمل reboot@
تنفيذ الأمر عندما يعاد تشغيل النظام daily@
مرة في اليوم. يمكن أيضا استخدام @midnight
للتنفيذ عند منتصف الليل.weekly@
مرة في الأسبوع. yearly@
مرة في السنة. -
تنفيذ أوامر عدّة
تُستخدم العلامة
&&
في حقل الأمر لتحديد أكثر من أمر للتنفيذ؛ مثلا:@daily command1 && command2
يطلب السّطر السابق تنفيذ الأمر
command1
وcommand2
يوميا. -
تعطيل إشعارات البريد
يُرسل Cron مبدئيا رسائل بريد إلى المستخدم عند تنفيذ المهام المجدولة (في حال كان النظام الذي يعمل عليه قادرا على ذلك). يمكن تعطيل هذه الإشعارات بإضافة السطر التالي إلى Crontab (عن طريق الأمر
crontab -e
):* * * * * >/dev/null 2>&1
ترجمة - بتصرّف - لمقال 11 Cron Scheduling Task Examples in Linux لصاحبه Ravi Saive.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.