0 0 28-31 * * افتح في محلّل تعبيرات Cron يستخدم سطر crontab الأمر GNU date (date -d tomorrow)؛ وعلى macOS استخدم date -v+1d. يدعم Quartz وSpring الرمز L مباشرة. في Kubernetes وGitHub Actions أضف التحقق نفسه من التاريخ في بداية المهمة.
شرح كل حقل
| الحقل | القيمة | يطابق |
|---|---|---|
| الدقيقة | 0 | 0 |
| الساعة | 0 | 0 |
| يوم الشهر | 28-31 | 28, 29, 30, 31 |
| الشهر | * | كل القيم |
| يوم الأسبوع | * | كل القيم |
أوقات التشغيل القادمة
مثال: أول 6 مرات تشغيل بعد 1 يناير 2026 (UTC).
- السبت، 31 يناير 2026، 00:00
- السبت، 28 فبراير 2026، 00:00
- الثلاثاء، 31 مارس 2026، 00:00
- الخميس، 30 أبريل 2026، 00:00
- الأحد، 31 مايو 2026، 00:00
- الثلاثاء، 30 يونيو 2026، 00:00
نسخ جاهزة للاستخدام
0 0 28-31 * * [ "$(date -d tomorrow +\%d)" = 01 ] && /path/to/command أضف السطر باستخدام crontab -e. يعمل وفق المنطقة الزمنية للخادم ما لم يُضبط CRON_TZ أو TZ.
apiVersion: batch/v1
kind: CronJob
metadata:
name: last-day-of-month
spec:
schedule: "0 0 28-31 * *"
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 غالبًا.
on:
schedule:
- cron: '0 0 28-31 * *'
workflow_dispatch: يستخدم GitHub Actions توقيت UTC دائمًا، ويقبل فواصل لا تقل عن 5 دقائق، وقد يتأخر بدء التشغيل المجدول عند الضغط.
0 0 0 L * ? يضع Quartz الثواني أولًا ويتطلب ? في يوم الشهر أو يوم الأسبوع. تُرقَّم الأيام من 1 إلى 7 بدءًا من الأحد، لذا فالأسماء أكثر أمانًا.
@Scheduled(cron = "0 0 0 L * *") يستخدم Spring @Scheduled(cron = …) ستة حقول: الثواني ثم الحقول الخمسة المعتادة.
الأسئلة الشائعة
› لماذا تُكتب % على شكل \% في crontab؟
في سطر crontab تعني % سطرًا جديدًا (مدخلًا للأمر). اكتب \% ليصل تنسيق التاريخ إلى shell كما هو.
› بأي منطقة زمنية يعمل 0 0 28-31 * *؟
يستخدم cron المنطقة الزمنية للجهاز أو الخدمة التي تشغّله. في لينكس هي منطقة النظام ما لم يُضبط CRON_TZ أو TZ؛ وتقبل CronJob في Kubernetes الحقل spec.timeZone؛ ويستخدم GitHub Actions توقيت UTC دائمًا.
› كيف أتحقق من هذا الجدول قبل النشر؟
افتح 0 0 28-31 * * في محلّل تعبيرات Cron على هذا الموقع. يشرح كل حقل ويعرض أوقات التشغيل القادمة بتوقيتك المحلي أو بتوقيت UTC، داخل المتصفح مباشرة.