أتمتة المهام المتكررة هي واحدة من القوى الخارقة لمسؤولي الأنظمة ومهندسي البرمجيات. سواء كنت تقوم بتشغيل نسخ احتياطية ليلية، أو مسح الملفات المؤقتة، أو إرسال ملخصات البريد الإلكتروني الأسبوعية، فأنت بحاجة إلى مجدول.

في عالم Unix/Linux، يعتبر Cron الملك بلا منازع للجدولة. هو مجدول مهام يعتمد على الوقت يعمل في الخلفية كبرنامج خفي (daemon) وينفذ الأوامر في فترات زمنية محددة يتم تعريفها بواسطة تنسيق خاص يسمى Cron Expression.

ومع ذلك، يمكن أن تكون صيغة cron غامضة وصعبة القراءة. سلسلة مثل 0 0 * * 0 تتطلب تفكيراً لفك تشفيرها ("هل هذا منتصف الليل أيام الأحد أم ظهر أيام الاثنين؟"). حرف واحد خاطئ قد يعني تشغيل النسخة الاحتياطية كل دقيقة بدلاً من كل شهر، مما قد يؤدي إلى تعطل الخادم الخاص بك.

تم تصميم مولد Cron Expression هذا للقضاء على تلك المخاطر. يوفر واجهة مرئية وتفاعلية لبناء جداول cron مثالية فوراً، مع تعليمك الصيغة الأساسية.

ما هو Crontab؟

ملف crontab (جدول Cron) هو ملف التكوين حيث يتم تخزين جداول cron. يمثل كل سطر في ملف crontab وظيفة مميزة ويتبع بنية محددة من ستة أعمدة:

# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 6)
# │ │ │ │ │
# * * * * * 
    

فهم الحقول الخمسة

لإتقان cron، يجب أن تفهم حقول الوقت الخمسة. أداتنا تتعامل مع هذه الأمور نيابة عنك، لكن معرفتها تساعد في تصحيح الأخطاء.

1. الدقيقة (Minute)

الدقيقة الدقيقة التي يجب تشغيل الأمر فيها. * تعني "كل دقيقة". 0 تعني "في بداية الساعة".

2. الساعة (Hour)

ساعة اليوم بتنسيق 24 ساعة. 0 هو منتصف الليل، 13 هو الساعة 1 مساءً.

3. يوم من الشهر (Day of Month)

أيام التقويم المحددة (1-31). كن حذراً: لا تحتوي جميع الأشهر على 31 يوماً.

4. الشهر (Month)

يناير هو 1، ديسمبر هو 12. بعض الأنظمة تدعم الأسماء (JAN, FEB)، لكن الأرقام أكثر أماناً.

5. يوم من الأسبوع (Day of Week)

0 هو الأحد. 6 هو السبت. بشكل فريد، 7 غالباً ما يكون الأحد أيضاً.

الرموز الخاصة والمشغلين

إلى جانب الأرقام البسيطة، يدعم cron مشغلين أقوياء:

  • النجمة (*): "كل". وجود * في حقل الساعة يعني "كل ساعة".
  • الفاصلة (،): "و". 1،15،30 في الدقائق تعني التشغيل في الدقيقة 1 و 15 و 30.
  • الواصلة (-): "إلى". 1-5 تعني الأيام من 1 إلى 5 (من الاثنين إلى الجمعة).
  • الشرطة المائلة (/): "كل فترة". */15 في الدقائق تعني "كل 15 دقيقة".

أمثلة Cron شائعة

فيما يلي الجداول الأكثر استخداماً لمطوري الويب ومسؤولي الأنظمة:

التعبير الوصف حالة الاستخدام
0 0 * * * كل يوم في منتصف الليل النسخ الاحتياطي اليومي
0 0 * * 0 كل أحد في منتصف الليل التقارير الأسبوعية
*/5 * * * * كل 5 دقائق مراقبة الموارد
@reboot عند بدء التشغيل تشغيل الخدمات

أفضل الممارسات للإنتاج

كتابة التعبير هي الخطوة الأولى فقط. إليك كيفية تشغيل مهام cron بمسؤولية.

1. استخدم دائماً المسارات المطلقة

غالباً ما يعمل Cron في بيئة ضيقة مع PATH مختلف عن غلاف المستخدم الخاص بك. لا تعتمد على python script.py. استخدم /usr/bin/python3 /home/user/scripts/script.py.

2. التعامل مع المخرجات والأخطاء

بشكل افتراضي، يحاول cron إرسال المخرجات بالبريد الإلكتروني إلى المستخدم. من الأفضل إعادة توجيه المخرجات إلى السجلات:

0 0 * * * /path/to/backup.sh > /var/log/backup.log 2>&1

3. منع تداخل المهام

إذا قمت بتشغيل وظيفة كل دقيقة، ولكنها تستغرق 90 ثانية للاكتمال، فسينتهي بك الأمر في النهاية بعشرات الحالات التي تعمل بالتوازي، مما يؤدي إلى تعطل الخادم. استخدم ملف قفل (Lock file) لضمان تشغيل مثيل واحد فقط في كل مرة.

لماذا تستخدم هذا المولد؟

بينما يمكنك قراءة دليل man 5 crontab، إلا أنه كثيف ومعقد. يبسط منشئ جدول Cron هذا الأمر من خلال تقديم:

  • ترجمة بشرية: يترجم فوراً الرموز المعقدة إلى لغة مفهومة.
  • التحقق: يمنع التواريخ المستحيلة.
  • التشغيل التالي: يحسب ويعرض لك التواريخ الخمسة التالية التي سيتم فيها تشغيل هذه الوظيفة.

لا تترك مهامك المجدولة للصدفة. استخدم مولد Cron المجاني لكتابة جداول دقيقة لبنيتك التحتية.