تعبيرات Cron مُبسّطة: جدوِل أي شيء
تحتاج إلى تشغيل نسخة احتياطية لقاعدة البيانات كل ليلة الساعة 3 صباحًا. أو إرسال تقرير كل يوم اثنين صباحًا. أو مسح ذاكرة التخزين المؤقت كل 15 دقيقة. على خوادم Linux وUnix، الأداة لذلك هي cron، والطريقة التي تخبر بها cron متى يشغّل شيئًا هي بـتعبير cron.
تبدو تعبيرات cron مخيفة للوهلة الأولى. 0 3 * * * أو */15 9-17 * * 1-5 قد تبدو كرطانة إذا لم تعرف النمط. لكن الصياغة بسيطة بشكل مدهش بمجرد فهم الحقول الخمسة.
الحقول الخمسة
كل تعبير cron قياسي يحتوي على خمسة حقول بالضبط، مفصولة بمسافات. كل حقل يمثل وحدة زمنية:
┌───────────── الدقيقة (0-59)
│ ┌───────────── الساعة (0-23)
│ │ ┌───────────── يوم الشهر (1-31)
│ │ │ ┌───────────── الشهر (1-12)
│ │ │ │ ┌───────────── يوم الأسبوع (0-7، حيث 0 و7 هما الأحد)
│ │ │ │ │
* * * * *
هذا كل شيء. خمسة حقول، من اليسار إلى اليمين: الدقيقة، الساعة، يوم الشهر، الشهر، يوم الأسبوع.
هل تعلم؟ اسم "cron" مأخوذ من الكلمة اليونانية "chronos" التي تعني الوقت. عفريت cron (العملية الخلفية) كان جزءًا أساسيًا من أنظمة التشغيل الشبيهة بـUnix منذ عام 1975.
الأحرف الخاصة
النجمة (*) — كل القيم
النجمة تعني "كل قيمة ممكنة" لذلك الحقل.
* * * * * = كل دقيقة من كل ساعة من كل يوم.
الفاصلة (,) — قيم متعددة
الفاصلة تفصل القيم الفردية.
0 9,12,18 * * * = عند الدقيقة 0 من الساعات 9 و12 و18 (9:00 صباحًا و12:00 ظهرًا و6:00 مساءً).
الشرطة (-) — نطاق قيم
الشرطة تحدد نطاقًا.
0 9-17 * * * = عند الدقيقة 0 من كل ساعة من 9 إلى 17 (9:00 صباحًا إلى 5:00 مساءً، كل ساعة).
الشرطة المائلة (/) — قيم الخطوة
الشرطة المائلة تحدد الفترات.
*/15 * * * * = كل 15 دقيقة (الدقيقة 0 و15 و30 و45 من كل ساعة).
0 */2 * * * = كل ساعتين عند الدقيقة 0 (منتصف الليل، 2 صباحًا، 4 صباحًا...).
قراءة تعبيرات Cron: تمارين
لنعمل على أمثلة شائعة. لكل منها، اقرأ الحقول الخمسة من اليسار إلى اليمين.
0 3 * * * — يوميًا الساعة 3:00 صباحًا
| الحقل | القيمة | المعنى |
|---|---|---|
| الدقيقة | 0 | عند الدقيقة 0 |
| الساعة | 3 | من الساعة 3 (3 صباحًا) |
| يوم الشهر | * | كل يوم |
| الشهر | * | كل شهر |
| يوم الأسبوع | * | كل يوم من الأسبوع |
الترجمة: "الساعة 3:00 صباحًا كل يوم." الخيار الكلاسيكي للنسخ الاحتياطية الليلية.
*/15 * * * * — كل 15 دقيقة
| الحقل | القيمة | المعنى |
|---|---|---|
| الدقيقة | */15 | كل 15 دقيقة |
| الساعة | * | كل ساعة |
| يوم الشهر | * | كل يوم |
| الشهر | * | كل شهر |
| يوم الأسبوع | * | كل يوم |
الترجمة: "كل 15 دقيقة، على مدار الساعة." شائع لفحوصات الصحة وتحديث ذاكرة التخزين المؤقت.
0 9 * * 1-5 — أيام العمل الساعة 9:00 صباحًا
| الحقل | القيمة | المعنى |
|---|---|---|
| الدقيقة | 0 | عند الدقيقة 0 |
| الساعة | 9 | من الساعة 9 |
| يوم الشهر | * | كل يوم |
| الشهر | * | كل شهر |
| يوم الأسبوع | 1-5 | الاثنين حتى الجمعة |
الترجمة: "الساعة 9:00 صباحًا، من الاثنين إلى الجمعة." مثالي لتقارير العمل اليومية.
0 0 1 * * — أول يوم من كل شهر
| الحقل | القيمة | المعنى |
|---|---|---|
| الدقيقة | 0 | عند الدقيقة 0 |
| الساعة | 0 | من الساعة 0 (منتصف الليل) |
| يوم الشهر | 1 | في اليوم الأول |
| الشهر | * | كل شهر |
| يوم الأسبوع | * | أي يوم من الأسبوع |
الترجمة: "عند منتصف الليل في أول يوم من كل شهر." يُستخدم للتقارير الشهرية أو الفواتير أو عمليات التنظيف.
30 8 * * 1 — أيام الاثنين الساعة 8:30 صباحًا
| الحقل | القيمة | المعنى |
|---|---|---|
| الدقيقة | 30 | عند الدقيقة 30 |
| الساعة | 8 | من الساعة 8 |
| يوم الشهر | * | كل يوم |
| الشهر | * | كل شهر |
| يوم الأسبوع | 1 | الاثنين |
الترجمة: "الساعة 8:30 صباحًا كل اثنين." ممتاز لإشعارات الفريق الأسبوعية.
كتابة تعبيرات Cron الخاصة بك
إليك نهجًا منظمًا:
- ابدأ بالوقت. "كل يوم الساعة 3 صباحًا" أو "كل 5 دقائق خلال ساعات العمل."
- املأ الحقول من اليسار إلى اليمين. ابدأ بالدقيقة، ثم الساعة، ثم يوم الشهر، ثم الشهر، ثم يوم الأسبوع.
- استخدم
*لـ"كل". إذا لم يهمك حقل معين، استخدم*. - اختبر قبل النشر. تحقق دائمًا من أن تعبيرك ينتج الجدول المتوقع.
مرجع سريع للأنماط الشائعة
| الجدول | التعبير |
|---|---|
| كل دقيقة | * * * * * |
| كل 5 دقائق | */5 * * * * |
| كل ساعة | 0 * * * * |
| كل يوم عند منتصف الليل | 0 0 * * * |
| كل يوم الساعة 3:00 صباحًا | 0 3 * * * |
| كل اثنين الساعة 9:00 صباحًا | 0 9 * * 1 |
| أيام العمل الساعة 8:30 صباحًا | 30 8 * * 1-5 |
| أول كل شهر | 0 0 1 * * |
| كل 15 دقيقة في ساعات العمل | */15 9-17 * * 1-5 |
| مرتين يوميًا (9 صباحًا و6 مساءً) | 0 9,18 * * * |
| كل أحد الساعة 2:00 صباحًا | 0 2 * * 0 |
الأخطاء الشائعة
نسيان أن الساعات 0-23
الساعة 13 هي 1:00 مساءً وليس الساعة 1. خطأ شائع هو كتابة 0 1 * * * معتقدًا أنها تعمل الساعة 1:00 مساءً بينما تعمل فعلاً الساعة 1:00 صباحًا.
الخلط في يوم الأسبوع
الأحد يمكن أن يكون 0 أو 7 (كلاهما صالح). الاثنين هو 1، والسبت هو 6. بعض الناس يتوقعون أن الاثنين يكون 0.
تفاعل يوم الشهر مع يوم الأسبوع
إذا حددت كلاً من يوم الشهر ويوم الأسبوع (لا أحدهما *)، فإن معظم تطبيقات cron تشغّل المهمة عندما يتحقق أي من الشرطين وليس كلاهما. هذا يفاجئ كثيرين.
تحذير التعبير 0 9 15 * 1 لا يعني "الساعة 9 صباحًا في اليوم 15، لكن فقط إذا كان يوم اثنين." بل يعني "الساعة 9 صباحًا في اليوم 15 من كل شهر وكذلك الساعة 9 صباحًا كل يوم اثنين." هذا مصدر شائع لسلوك غير متوقع.
الوعي بالمنطقة الزمنية
يعمل cron بالمنطقة الزمنية المحلية للخادم. إذا كان خادمك بتوقيت UTC وأنت في الرياض (UTC+3)، فإن مهمة cron 0 9 * * * تعمل الساعة 12:00 ظهرًا بتوقيتك. تحقق دائمًا من المنطقة الزمنية لخادمك.
نصيحة اختبر وتصوّر تعبيرات cron قبل نشرها: كيفية قراءة واختبار تعبيرات Cron. شاهد أوقات التشغيل القادمة وتأكد من أن الجدول يطابق ما تنوي.
أنشئ واختبر تعبيرات cron الخاصة بك:
مجاني وفوري وبدون تسجيل.