ما هو تعبير Cron؟
Cron هو مُجدول مهام مبني على الوقت في أنظمة Unix/Linux. تعبير Cron هو الصياغة التي تخبر cron متى ينفذ مهمة.
لقد رأيتها من قبل: 0 0 * * *. تعني "عند منتصف الليل، كل يوم." لكن بمجرد تجاوز الأساسيات، تصبح صياغة cron معقدة بسرعة — 5 حقول، ثوانٍ اختيارية، اختلافات بين المنصات، وأحرف خاصة يقوم معظم الناس بنسخها دون فهم.
هذا الدليل يوضح كل شيء.
الحقول الـ5 (أو 6)
يستخدم Cron القياسي 5 حقول مفصولة بمسافات:
┌──────────── الدقيقة (0–59)
│ ┌────────── الساعة (0–23)
│ │ ┌──────── يوم الشهر (1–31)
│ │ │ ┌────── الشهر (1–12)
│ │ │ │ ┌──── يوم الأسبوع (0–7, 0 و7 = الأحد)
│ │ │ │ │
* * * * *
بعض الأنظمة (AWS EventBridge، Spring، Quartz) تضيف حقل الثواني في البداية، مما يجعله 6 حقول. تحقق من منصتك.
الأحرف الخاصة
| الحرف | المعنى | مثال |
|---|---|---|
* | كل القيم | * * * * * = كل دقيقة |
, | قيم متعددة | 0 9,17 * * * = 9 صباحاً و5 مساءً |
- | نطاق | 0 9-17 * * * = كل ساعة من 9 إلى 17 |
/ | خطوة | */15 * * * * = كل 15 دقيقة |
L | الأخير | 0 0 L * * = آخر يوم في الشهر (Quartz فقط) |
? | بدون قيمة | 0 0 ? * MON = أيام الاثنين، أي يوم من الشهر (Quartz) |
تعبيرات Cron الشائعة
كل دقيقة
* * * * *
كل 5 دقائق
*/5 * * * *
كل ساعة، في الدقيقة صفر
0 * * * *
كل يوم عند منتصف الليل
0 0 * * *
كل يوم الساعة 9 صباحاً
0 9 * * *
كل اثنين الساعة 9 صباحاً
0 9 * * 1
كل يوم عمل (اثنين–جمعة) الساعة 8 صباحاً
0 8 * * 1-5
كل نهاية أسبوع عند الظهر
0 12 * * 0,6
أول يوم من كل شهر عند منتصف الليل
0 0 1 * *
كل ربع سنة (يناير، أبريل، يوليو، أكتوبر) عند منتصف الليل
0 0 1 1,4,7,10 *
كل 30 دقيقة بين 9 صباحاً و5 مساءً في أيام العمل
*/30 9-17 * * 1-5
المصائد
"كل ساعتين" هي 0 */2 * * *، وليس */2 * * * *
*/2 * * * * تعني كل دقيقتين. الخطوة تنطبق على الحقل الذي توجد فيه.
الأحد هو 0 و7 معاً
في Cron القياسي، 0 و7 كلاهما يعني الأحد. تجنب الغموض — استخدم 0 باتساق.
يوم الشهر ويوم الأسبوع هما OR وليس AND
0 0 1 * 1 تعمل في اليوم الأول من كل شهر وكذلك كل يوم اثنين — وليس فقط أيام الاثنين التي تقع في اليوم الأول. لتحقيق "أول اثنين في الشهر"، تحتاج منطق سكريبت خارج Cron نفسه.
المناطق الزمنية
يعمل Cron في المنطقة الزمنية المحلية للخادم إلا إذا تم تهيئته بشكل مختلف. مهمة عند 0 9 * * * على خادم UTC تعمل الساعة 9 صباحاً UTC — قد يكون ذلك الساعة 2 صباحاً أو 11 مساءً في منطقتك الزمنية.
تحقق دائماً:
timedatectl # يعرض المنطقة الزمنية الحالية في Linux
اختصارات مسماة (غير قياسية لكن مدعومة على نطاق واسع)
| الاختصار | المكافئ | المعنى |
|---|---|---|
@yearly | 0 0 1 1 * | مرة في السنة |
@monthly | 0 0 1 * * | مرة في الشهر |
@weekly | 0 0 * * 0 | مرة في الأسبوع (الأحد) |
@daily | 0 0 * * * | مرة في اليوم (منتصف الليل) |
@hourly | 0 * * * * | مرة في الساعة |
@reboot | — | عند بدء تشغيل النظام |
توليد والتحقق من تعبيرات Cron
Cron Generator يتيح بناء التعبيرات بصرياً — اختر الجدول بلغة واضحة، احصل على تعبير Cron. لا مزيد من التخمين حول صحة 0 9 * * 1-5.
يعمل أيضاً بالعكس: الصق أي تعبير Cron واحصل على شرح واضح لموعد تشغيله.
بطاقة المرجع السريع
# ┌──── الدقيقة 0-59
# │ ┌─── الساعة 0-23
# │ │ ┌── اليوم 1-31
# │ │ │ ┌─ الشهر 1-12
# │ │ │ │ ┌ الأسبوع 0-7 (0=أحد)
# │ │ │ │ │
* * * * * كل دقيقة
0 * * * * كل ساعة
0 0 * * * كل يوم عند منتصف الليل
0 9 * * 1 كل اثنين الساعة 9
*/15 * * * * كل 15 دقيقة
0 0 1 * * أول يوم من كل شهر