Crontab في Linux: أمثلة على جدولة الوظائف
⚡ ملخص ذكي
يقوم Crontab في نظام Linux بجدولة الأوامر لتشغيلها تلقائيًا في أوقات أو تواريخ أو فترات زمنية محددة باستخدام برنامج cron daemon، مما يسمح للمسؤولين بأتمتة عمليات النسخ الاحتياطي وتنظيف السجلات والإشعارات والصيانة الروتينية للنظام دون أي تدخل يدوي.

Crontab، اختصارًا لـ cron table، هو ملف التكوين والأمر الذي يدير لينكس جدولة المهام. تشرح الأقسام التالية تنسيق crontab، والأوامر لإضافة المهام وعرضها وإزالتها، وسلاسل @ الخاصة، وأمثلة جدولة جاهزة للاستخدام.
ما هو كرونتاب؟
يُشتق اسم Cron من الكلمة اليونانية "Chronos" التي تعني الوقت. وهو عبارة عن عملية نظام (خدمة) تُنفذ المهام تلقائيًا وفقًا لجدول زمني محدد. Cron عبارة عن مجموعة من الأوامر تُستخدم لتشغيل المهام المجدولة بانتظام. أما Crontab فهو اختصار لـ "جدول Cron"، ويتيح لك استخدام مُجدول مهام Cron لتنفيذ هذه المهام.
Crontab هو أيضاً اسم البرنامج المستخدم لتعديل هذا الجدول الزمني. ويتم تشغيله بواسطة ملف crontab - وهو ملف تكوين يسرد أوامر shell التي يتم تشغيلها دورياً وفقاً للجدول الزمني المحدد.
لماذا تستخدم Cron Jobs؟
فيما يلي الأسباب الرئيسية لاستخدام مهام cron في نظام Linux:
- يقوم بعمل نسخ احتياطية مجدولة لملفات السجلات أو قواعد البيانات.
- يقوم بحذف ملفات السجل القديمة تلقائيًا.
- Archiيقوم بحذف وتنظيف جداول قاعدة البيانات.
- يرسل رسائل بريد إلكتروني للتنبيهات مثل الرسائل الإخبارية أو تذكيرات انتهاء صلاحية كلمات المرور.
- يقوم بتنظيف البيانات المخزنة مؤقتًا بشكل دوري.
- يقوم بأتمتة المهام المتكررة في أنظمة يونكس ولينكس.
- يُؤتمت عمليات الصيانة الروتينية للنظام.
كيفية استخدام كرون في لينكس؟
تتضمن حزمة نظام لينكس أداة جدولة مهام مفيدة تُسمى crontab. تُعدّ crontab شائعة الاستخدام لأنها تتيح جدولة المهام لتشغيلها بصلاحيات المستخدم الجذر، مما يُسهّل إجراء تغييرات النظام تلقائيًا. كل ما عليك فعله هو تغيير المهمة مرة واحدة ثم الانتظار حتى يتم تشغيلها مرة أخرى في الموعد المحدد.
تنسيق Cronta في لينكس
يحتوي إدخال crontab في نظام Linux على ستة حقول. تحدد الحقول الخمسة الأولى وقت وتاريخ التنفيذ، بينما يحتوي الحقل السادس على الأمر المراد تشغيله.
بناء جملة كرونتاب:
[Minute] [hour] [Day_of_the_Month] [Month_of_the_Year] [Day_of_the_Week] [command]
يوضح الرسم البياني أدناه العلاقة بين كل علامة نجمية في إدخال crontab والحقل الذي تتحكم فيه، من الدقيقة إلى يوم الأسبوع، متبوعة بالأمر المراد تنفيذه.
تقبل حقول الوقت الخمسة القيم التالية: الدقيقة (من 0 إلى 59)، الساعة (من 0 إلى 23)، يوم الشهر (من 1 إلى 31)، الشهر (من 1 إلى 12 أو من يناير إلى ديسمبر)، ويوم الأسبوع (من 0 إلى 7، حيث يشير كل من 0 و7 إلى يوم الأحد). يمكنك التحكم في كل حقل باستخدام هذه الأحرف الخاصة:
- النجمة (*): يطابق كل قيمة ممكنة لهذا الحقل.
- حدد نطاقًا: استخدم الواصلة لتحديد نطاق، مثل 1-10، 30-40، يناير-مارس، أو الاثنين-الأربعاء.
- تحديد نطاقات متعددة: استخدم الفواصل لدمج النطاقات، مثل أبريل-يونيو، أكتوبر-ديسمبر.
كيفية إضافة/تعديل Crontab
يمكن للمستخدمين تعديل مهام crontab الخاصة بهم باستخدام أمر crontab التالي. يستهدف الخيار -u ملف crontab الخاص بمستخدم معين، لذا أدخل اسم المستخدم كما هو موضح في الأمثلة اللاحقة:
$ crontab -u -e
يفتح الأمر أعلاه ملف تكوين crontab الشخصي لنظامك، والذي يمكنك تعديله في محرر النصوص الافتراضي لديك.
لا حاجة لإعادة تشغيل cron؛ فهو يطبق تغييراتك تلقائيًا. لعرض مهامك الحالية، استخدم:
$ crontab -l
لإزالة مهام crontab الخاصة بك، استخدم الأمر التالي:
$ crontab -r
لإضافة أو تحديث مهمة في جدول المهام (crontab)، استخدم الأمر التالي:
crontab -e
لتحرير ملف crontab الخاص بمستخدم آخر، قم بتسمية المستخدم باستخدام الخيار -u:
crontab -u username -e
كيفية إدراج Crontab
لعرض إدخالات crontab الخاصة بالمستخدم الحالي:
crontab -l
لعرض إدخالات crontab الخاصة بمستخدم معين:
crontab -u username -l
أمثلة مهمة على Crontab
فيما يلي بعض الأمثلة المهمة والجاهزة للاستخدام لجداول crontab:
| الوصف | أمر |
|---|---|
| يقوم بتشغيل مهام الجدولة المختلفة. يتم تنفيذ الأمر أدناه في الساعة 7 صباحًا و5 مساءً يوميًا. |
0 7,17 * * * /scripts/script.sh
|
| ينفذ مهمة مجدولة كل 5 دقائق. |
*/5* * * * * /scripts/script.sh
|
| ينفذ المهمة كل Monday في الساعة الخامسة صباحاً. هذا مفيد للمهام الأسبوعية مثل تنظيف النظام. |
0 5 * * mon /scripts/script.sh
|
| يقوم بتشغيل البرنامج النصي الخاص بك على فترات زمنية مدتها 3 دقائق. |
*/3 * * * * /scripts/monitor.sh
|
| يقوم بجدولة مهمة cron التي يتم تنفيذها في أشهر محددة - هنا، فبراير ويونيو وسبتمبر. |
* * * feb,jun,sep * /script/script.sh
|
| يتم التنفيذ في أيام محددة. هذا المثال يُنفذ في كل Monday والأربعاء الساعة 5 مساءً. |
0 17 * * mon,wed /script/script.sh
|
| يسمح هذا الأمر بتنفيذ cron في أول سبت من كل شهر. |
0 2 * * sat [ $(date +%d) -le 06 ] && /script/script.sh |
| يقوم بتشغيل برنامج نصي على فترات زمنية مدتها 6 ساعات، تم تكوينه كما يلي. |
0 */6 * * * /scripts/script.sh
|
| يُجدول مهمة لتنفيذها مرتين على Monday والثلاثاء. استخدم الإعدادات التالية للقيام بذلك. |
0 4,17 * * mon,tue /scripts/script.sh
|
| يقوم بجدولة مهمة cron لتنفيذها كل 15 ثانية. |
* * * * * /scripts/script.sh * * * * * sleep 15; /scripts/script.sh |
| يُجدول المهام سنويًا. يُشبه الأمر @yearly الأمر "0 0 1 1 *". يُشغّل المهمة مرة واحدة سنويًا في منتصف ليل الأول من يناير - وهو أمر مفيد لتهنئة رأس السنة. |
@yearly /scripts/script.sh
|
| يُنفّذ المهام شهريًا. يُشبه الأمر @monthly الأمر "0 0 1 * *". يُنفّذ المهمة في منتصف ليل اليوم الأول من كل شهر. |
@monthly /scripts/script.sh
|
| ينفذ مهام متعددة باستخدام إدخال cron واحد. |
* * * * * /scripts/script.sh; /scripts/scrit2.sh |
| يُجدول المهام أسبوعيًا. يُشبه الأمر @weekly الأمر "0 0 * * 0". يُنفذ مهامًا أسبوعية مثل تنظيف النظام في منتصف ليل كل يوم أحد. |
@weekly /bin/script.sh
|
| يُجدول المهام يوميًا. @daily مشابه لـ "0 0 * * *". يُنفذ المهمة مرة واحدة يوميًا عند منتصف الليل. |
@daily /scripts/script.sh
|
| يُنفّذ المهام كل ساعة. @hourly يُشبه "0 * * * *". فهو يُنفّذ المهمة في بداية كل ساعة. |
@hourly /scripts/script.sh
|
| يُشغّل المهام عند إعادة تشغيل النظام. يُعدّ الأمر @reboot مفيدًا للمهام التي يجب أن يُشغّلها النظام عند بدء التشغيل، مما يسمح بتشغيل مهام الخلفية تلقائيًا. |
@reboot /scripts/script.sh
|

