تعبير cron طريقة مختصرة لوصف جدولة تشغيل متكرر لمهمة، تُستخدم في أنظمة شبيهة بيونكس منذ السبعينيات. تستطيع خمسة حقول مفصولة بمسافات التعبير عن أي جدولة منتظمة تقريبًا.
الحقول الخمسة للتعبير
يبدو تعبير cron القياسي بالشكل الدقيقة الساعة يوم-الشهر الشهر يوم-الأسبوع. مثلًا، 30 14 * * 1 تعني "الساعة 14:30 كل يوم اثنين" — تعني النجوم "أي قيمة" ليوم الشهر والشهر.
معنى الشرطات المائلة والفواصل
الشرطة المائلة بعد نجمة، كما في */15 * * * *، تعني "كل 15 وحدة" — في هذه الحالة كل 15 دقيقة. تتيح الفاصلة تعداد عدة قيم محددة، مثلًا 0 9,18 * * * تُشغِّل المهمة مرتين يوميًا: الساعة 9:00 و18:00.
لماذا يُربك حقل "يوم الأسبوع" أكثر من غيره
في cron القياسي، يمكن تحديد حقلَي "يوم الشهر" و"يوم الأسبوع" معًا بقيمة غير النجمة في آنٍ واحد — في هذه الحالة تُشغَّل المهمة إذا تحقّق أحد الشرطين على الأقل (أو منطقي، لا و)، وهو ما يخالف التوقع البديهي لمعظم الناس.
نفس الصياغة، من crontab إلى جدولة Laravel
يمتلك Laravel — الذي يحظى بمجتمع مطورين عربي نشط — نظام جدولة مهام يُكتب بأسلوب سلس مثل ->dailyAt('13:00') ضمن routes/console.php، لكنه في الخلفية يُترجَم إلى نفس صياغة cron المكوّنة من خمسة حقول تمامًا. فهم صياغة cron الأصلية يجعل تشخيص سبب تشغيل مهمة مجدولة (أو عدم تشغيلها) في وقت غير متوقع أسهل بكثير.
لماذا نحتاج هذا
- فكّ تعبير cron لشخص آخر في إعدادات خادم أو خط أنابيب CI/CD.
- التحقق من صحة جدولة مكتوبة قبل نشرها في الإنتاج.
- تخطيط الوقت الدقيق لعمليات التشغيل القليلة القادمة لمهمة ما.
التوقيت الصيفي/الشتوي وcron
إذا كان المجدول يعمل بمنطقة زمنية تشهد انتقالًا بين التوقيت الصيفي والشتوي، فقد لا تُشغَّل مهمة مجدولة لساعة غير موجودة (مثلًا 2:30 ليلة تقديم الساعات) في ذلك اليوم، بينما قد تُشغَّل مهمة مجدولة لساعة تتكرر عند إرجاع الساعات مرتين. لهذا غالبًا ما تُختار للمهام الحرجة أوقات خارج نافذة الانتقال المعتادة (مثل منتصف الليل أو الساعة 3-4 صباحًا) أو يُحدَّد بوضوح التوقيت العالمي UTC.