Crontab في Linux: أمثلة على جدولة الوظائف

⚡ ملخص ذكي

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

  • ⏰ برنامج كرون الخفي: تقوم عملية cron الخلفية بقراءة ملفات crontab وتشغيل كل مهمة مجدولة في الدقيقة التي تحددها بالضبط.
  • 🗂️ تنسيق Crontab: خمسة حقول زمنية - الدقيقة، والساعة، ويوم الشهر، والشهر، ويوم الأسبوع - تسبق أمر التشغيل.
  • ✍️ وظائف التحرير: استخدم crontab -e لإضافة أو تغيير المهام، و crontab -l لعرض قائمة بها، و crontab -r لإزالتها.
  • 🔁 أوتار خاصة: تستبدل اختصارات مثل @reboot و @daily و @weekly و @hourly حقول الوقت الخمسة للجداول الزمنية الشائعة.
  • 📅 أمثلة عملية: تتضمن الإدخالات الجاهزة كل خمس دقائق، وأيام محددة من أيام الأسبوع، وعمليات التشغيل الشهرية، ومهام بدء التشغيل.
  • 🤖 مساعدة الذكاء الاصطناعي: يمكن للمساعدين الذين يعملون بالذكاء الاصطناعي وبرنامج GitHub Copilot إنشاء وشرح تعبيرات cron في ثوانٍ.

جدولة المهام باستخدام Crontab في نظام Linux مع أمثلة

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 والحقل الذي تتحكم فيه، من الدقيقة إلى يوم الأسبوع، متبوعة بالأمر المراد تنفيذه.

مخطط تنسيق 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

الأسئلة الشائعة

يتم تخزين ملفات crontab الخاصة بالمستخدم في المسار /var/spool/cron/ (أو /var/spool/cron/crontabs/ على نظام Debian و Ubuntuبينما يوجد جدول المهام على مستوى النظام في /etc/crontab وفي الدليل /etc/cron.d. يُنصح دائمًا بتعديل ملفات crontab الخاصة بالمستخدم باستخدام الأمر crontab -e بدلاً من فتحها مباشرةً.

يقوم برنامج Cron بتشغيل المهام فقط في وقتها المحدد بدقة، ويتخطى المهام إذا كان الجهاز مطفأً. أما برنامج Anacron tracيقوم ks بتشغيل المهام الفائتة بمجرد عودة النظام إلى العمل، لذا فهو يناسب أجهزة الكمبيوتر المحمولة وأجهزة الكمبيوتر المكتبية التي لا تعمل دائمًا.

يستخدم Cron بيئةً بسيطة، لذا فإنّ محدودية مسار النظام (PATH) هي السبب الشائع. استخدم مسارات مطلقة للأوامر والبرامج النصية، واجعل البرنامج النصي قابلاً للتنفيذ، ووجّه المخرجات إلى ملف سجلّ لتتمكن من رصد أيّ أخطاء لتصحيحها.

أضف >> /path/to/logfile 2>&1 إلى الأمر لالتقاط المخرجات القياسية والأخطاء في ملف. أو بدلاً من ذلك، عيّن متغير MAILTO في أعلى ملف crontab بحيث يرسل cron مخرجات كل مهمة عبر البريد الإلكتروني إلى هذا العنوان.

يتحكم الملفان /etc/cron.allow و /etc/cron.deny في الوصول. إذا كان الملف cron.allow موجودًا، فلا يُسمح باستخدام crontab إلا للمستخدمين المُدرجين فيه. أما إذا كان الملف cron.deny موجودًا فقط، فيُسمح لجميع المستخدمين، باستثناء المُدرجين فيه، بجدولة المهام.

يحتوي ملف crontab الخاص بالمستخدم، والذي تم إنشاؤه باستخدام الأمر crontab -e، على خمسة حقول زمنية متبوعة بالأمر. ويضيف ملف النظام /etc/crontab حقلاً يُحدد اسم المستخدم الذي يُشغّل المهمة، ويقرأ: الدقيقة، الساعة، اليوم، الشهر، يوم الأسبوع، اسم المستخدم، ثم الأمر.

نعم. تستطيع أدوات التعلّم الآلي تحديد أوقات تشغيل المهام وأوقات إنجازها الطبيعية، ثمّ رصد الحالات الشاذة مثل المهام التي تستغرق وقتًا أطول من اللازم، أو التي تفشل دون إشعار، أو التي لا تلتزم بجدولها الزمني. كما يُصنّف تحليل سجلات الذكاء الاصطناعي الأخطاء ذات الصلة لتسريع عملية تحديد السبب الجذري.

نعم. مساعد الطيار جيثب يمكنك إنشاء تعابير cron من تعليق بسيط باللغة الإنجليزية، وشرح وظيفة جدول زمني مثل */5 * * * *، وكتابة نص برمجي لتشغيل المهمة. اختبر التعبير دائمًا قبل إضافته إلى crontab الإنتاجي.

تلخيص هذه التدوينة بـ: