DevToolPal
ع

تعبير Cron

أول اثنين من كل شهر

تبدأ المهمة عند 09:00 في الأيام 1–7، ويُبقي اختبار shell اليوم الذي يوافق الاثنين فقط.

0 9 1-7 * * افتح في محلّل تعبيرات Cron

كتابة 0 9 1-7 * 1 لا تنجح: عند ضبط حقلي اليوم معًا يعمل cron إذا تطابق أيّهما، فيعمل في الأيام 1–7 وكل يوم اثنين. يدعم Quartz وSpring الصيغة MON#1.

شرح كل حقل

الحقل القيمة يطابق
الدقيقة 0 0
الساعة 9 9
يوم الشهر 1-7 1, 2, 3, 4, 5, 6, 7
الشهر * كل القيم
يوم الأسبوع * كل القيم

أوقات التشغيل القادمة

مثال: أول 6 مرات تشغيل بعد 1 يناير 2026 (UTC).

  1. الاثنين، 5 يناير 2026، 09:00
  2. الاثنين، 2 فبراير 2026، 09:00
  3. الاثنين، 2 مارس 2026، 09:00
  4. الاثنين، 6 أبريل 2026، 09:00
  5. الاثنين، 4 مايو 2026، 09:00
  6. الاثنين، 1 يونيو 2026، 09:00

نسخ جاهزة للاستخدام

crontab
0 9 1-7 * * [ "$(date +\%u)" = 1 ] && /path/to/command

أضف السطر باستخدام crontab -e. يعمل وفق المنطقة الزمنية للخادم ما لم يُضبط CRON_TZ أو TZ.

Kubernetes CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
  name: first-monday-of-month
spec:
  schedule: "0 9 1-7 * *"
  timeZone: "Etc/UTC"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - name: job
              image: busybox:1.36
              command: ["/bin/sh", "-c", "date; echo run"]

اضبط spec.timeZone (‏Kubernetes 1.27 فأحدث)؛ وبدونه يتبع الجدول المنطقة الزمنية لـ controller manager، وهي UTC غالبًا.

GitHub Actions
on:
  schedule:
    - cron: '0 9 1-7 * *'
  workflow_dispatch:

يستخدم GitHub Actions توقيت UTC دائمًا، ويقبل فواصل لا تقل عن 5 دقائق، وقد يتأخر بدء التشغيل المجدول عند الضغط.

Quartz
0 0 9 ? * MON#1

يضع Quartz الثواني أولًا ويتطلب ? في يوم الشهر أو يوم الأسبوع. تُرقَّم الأيام من 1 إلى 7 بدءًا من الأحد، لذا فالأسماء أكثر أمانًا.

Spring
@Scheduled(cron = "0 0 9 * * MON#1")

يستخدم Spring ‏@Scheduled(cron = …) ستة حقول: الثواني ثم الحقول الخمسة المعتادة.

الأسئلة الشائعة

› لماذا يعمل 0 9 1-7 * 1 أكثر من اللازم؟

عندما يكون يوم الشهر ويوم الأسبوع مقيّدين معًا يجمعهما cron بشرط «أو»، فيعمل من اليوم 1 إلى 7 وكذلك كل يوم اثنين.

› بأي منطقة زمنية يعمل 0 9 1-7 * *؟

يستخدم cron المنطقة الزمنية للجهاز أو الخدمة التي تشغّله. في لينكس هي منطقة النظام ما لم يُضبط CRON_TZ أو TZ؛ وتقبل CronJob في Kubernetes الحقل spec.timeZone؛ ويستخدم GitHub Actions توقيت UTC دائمًا.

› كيف أتحقق من هذا الجدول قبل النشر؟

افتح 0 9 1-7 * * في محلّل تعبيرات Cron على هذا الموقع. يشرح كل حقل ويعرض أوقات التشغيل القادمة بتوقيتك المحلي أو بتوقيت UTC، داخل المتصفح مباشرة.