تطوير · مدة القراءة: 3 د ·
تعبيرات cron بشرح مبسّط، مع 10 أمثلة جاهزة
خمسة حقول وأربعة رموز وفخ واحد يتعلق بالمنطقة الزمنية. تعلّم قراءة جداول cron وكتابتها بأمثلة يمكنك نسخها.

cron هو المجدول الذي يشغّل النسخ الاحتياطية والتقارير ومهام التنظيف على الخوادم في كل مكان، وتظهر صياغته أيضًا في GitHub Actions وCronJobs في Kubernetes ومعظم مجدولات السحابة. الجدول خمسة حقول تفصل بينها مسافات.
┌ الدقيقة (0-59)
│ ┌ الساعة (0-23)
│ │ ┌ يوم الشهر (1-31)
│ │ │ ┌ الشهر (1-12)
│ │ │ │ ┌ يوم الأسبوع (0-6، 0 = الأحد)
* * * * *
أربعة رموز
* تعني أي قيمة. الفاصلة تصنع قائمة (1,15)، والشرطة نطاقًا (1-5)، والشرطة المائلة خطوة (*/15 = كل 15 وحدة). هذه الأربعة تغطي تقريبًا كل جدول.
10 أمثلة
*/5 * * * * كل 5 دقائق
0 * * * * كل ساعة عند رأسها
0 9 * * * يوميًا الساعة 09:00
30 2 * * * كل ليلة الساعة 02:30
0 9 * * 1-5 من الاثنين إلى الجمعة الساعة 09:00
0 18 * * 5 كل جمعة الساعة 18:00
0 0 1 * * منتصف الليل في اليوم الأول من كل شهر
0 0 1 1 * مرة في السنة، في 1 يناير
0 */6 * * * كل 6 ساعات
15 8,12,17 * * * يوميًا 08:15 و12:15 و17:15
الفخ الأول: يوم الشهر ويوم الأسبوع
عندما يكون الحقلان مقيّدين معًا، يشغّل cron التقليدي المهمة عند تطابق أي منهما. 0 0 1 * 1 يعمل في اليوم الأول من كل شهر وأيضًا كل يوم اثنين، لا في أيام الاثنين التي توافق اليوم الأول فقط.
الفخ الثاني: المنطقة الزمنية
ليس لـ cron منطقة زمنية خاصة به. تعمل المهمة وفق المنطقة الزمنية للجهاز أو الخدمة التي تشغّلها، وغالبًا ما تكون UTC. المهمة المضبوطة على 0 9 * * * على خادم UTC تعمل الساعة 09:00 UTC، وقد يكون ذلك قبل وقتك المحلي أو بعده بعدة ساعات، وقد يزيحها التوقيت الصيفي مرة أخرى.
الفخ 3: تشغيلات متداخلة وأخرى فائتة
يبدأ cron المهمة في موعدها سواء انتهى التشغيل السابق أم لا. نسخة احتياطية مجدولة كل 5 دقائق وتستغرق 7 دقائق ستعمل في النهاية مرتين في الوقت نفسه. غلّف المهام الطويلة بقفل (في Linux يفعل flock ذلك في سطر واحد) أو اجعل تشغيلها المتوازي آمنًا. كما أن cron لا يعوّض ما فات: إذا كان الجهاز مطفأً في 02:30، فلن تعمل مهمة 02:30 في تلك الليلة ببساطة.
*/5 * * * * flock -n /tmp/backup.lock /usr/local/bin/backup.sh
اختصارات وفروق صغيرة
تقبل تطبيقات cron كثيرة اختصارات مثل @hourly و @daily و @weekly و @monthly و @reboot بدل الحقول الخمسة. وفي معظمها يمكن كتابة الأحد 0 أو 7، ويُسمح بأسماء مثل MON أو JAN. تختلف المنصات في التفاصيل، لذا راجع توثيق النظام الذي سيشغّل المهمة، خصوصًا في المجدولات السحابية المُدارة.
إلى أين يذهب الناتج؟
افتراضيًا يرسل cron ناتج المهمة بالبريد إلى المستخدم المحلي، وهذا يعني في معظم الخوادم أنه يضيع. وجّه الناتج إلى ملف سجل أو إلى نظام السجلات لديك، حتى تترك المهمة الفاشلة أثرًا:
30 2 * * * /usr/local/bin/report.sh >> /var/log/report.log 2>&1
تحقّق قبل النشر
الصق تعبيرًا في شارح تعبيرات cron من 4Dev وسيقرأ لك الجدول بلغة واضحة. يدعم الصيغة القياسية ذات الحقول الخمسة؛ أما التعبيرات ذات الستة أو السبعة حقول التي تضم الثواني أو السنوات، كما في Quartz أو Spring، فتُرفض مع رسالة خطأ.