صيغة تعبير كرون في AWS
داخل cron(…) يتوقع AWS ستة حقول تفصل بينها مسافات:
| الحقل | القيم المسموحة | الرموز الخاصة |
|---|---|---|
| الدقيقة | 0–59 | , - * / |
| الساعة | 0–23 | , - * / |
| يوم الشهر | 1–31 | , - * ? / L W |
| الشهر | 1–12 أو JAN–DEC | , - * / |
| يوم الأسبوع | 1–7 أو SUN–SAT (1 = الأحد) | , - * ? L # |
| السنة | 1970–2199 | , - * / |
الرموز الخاصة
| الرمز | المعنى |
|---|---|
? | بلا قيمة محددة. يجب أن يكون أحد حقلي يوم الشهر ويوم الأسبوع ?، ويمكن أن يكون الآخر * أو قيمة محددة. |
L | الأخير: L في حقل يوم الشهر هو آخر يوم في الشهر، وL في حقل يوم الأسبوع هو آخر يوم في الأسبوع (السبت). |
W | أقرب يوم عمل: 3W يعمل في يوم العمل الأقرب إلى اليوم الثالث من الشهر. |
# | ترتيب اليوم في الشهر: 3#2 هو ثاني ثلاثاء في الشهر. |
/ | خطوة التكرار: 0/15 في حقل الدقائق يعمل عند الدقائق 0 و15 و30 و45. |
أمثلة على كرون AWS EventBridge
اضغط على أي تعبير لتحميله في المولّد أعلاه.
| التعبير | الجدول الزمني |
|---|---|
| كل 5 دقائق. | |
| عند الدقيقة 0 من كل ساعة. | |
| في تمام الساعة 8:00 ص، من الإثنين إلى الجمعة. | |
| كل 15 دقيقة، بين 8:00 ص و5:59 م، من الإثنين إلى الجمعة. | |
| في تمام الساعة 12:00 ص، في اليوم 1 من الشهر. | |
| في تمام الساعة 6:00 م، في آخر يوم من الشهر. | |
| في تمام الساعة 9:00 ص، في أول إثنين من الشهر. | |
| في تمام الساعة 12:00 م، يوم الأحد فقط. | |
| في تمام الساعة 6:30 ص، في اليوم 1 من الشهر، في شهر يناير فقط، في عام 2027. |
الفرق بين كرون AWS وكرون لينكس
- لا يوجد حقل للثواني، لكن يوجد حقل للسنة في النهاية، لذا يتكوّن تعبير AWS من ستة حقول وتعبير لينكس من خمسة. فالتعبير
0 8 * * ? *يعني الساعة 08:00 كل يوم. - يجب أن يكون أحد حقلي اليوم
?: التعبير* * * * * *مرفوض، بينما0/5 * * * ? *صحيح. - الأحد هو
1والسبت هو7، لذا تُكتب الأيام من الإثنين إلى الجمعة2-6أوMON-FRI. - تعمل قواعد EventBridge بتوقيت UTC. وإذا كان الجدول يجب أن يتبع التوقيت المحلي والتوقيت الصيفي، فأنشئه في EventBridge Scheduler الذي يتيح اختيار المنطقة الزمنية.
- أصغر فاصل زمني هو دقيقة واحدة. وللفواصل البسيطة يكون تعبير المعدّل مثل
rate(5 minutes)أسهل في القراءة.
الاستخدام عبر AWS CLI
لقاعدة EventBridge (بتوقيت UTC دائمًا):
aws events put-rule \
--name weekday-report \
--schedule-expression "cron(0 8 ? * MON-FRI *)"
ولـ EventBridge Scheduler مع منطقة زمنية:
aws scheduler create-schedule \
--name weekday-report \
--schedule-expression "cron(0 8 ? * MON-FRI *)" \
--schedule-expression-timezone "Asia/Dubai" \
--flexible-time-window Mode=OFF \
--target file://target.json
الأسئلة الشائعة
لماذا يرفض AWS تعبير الكرون الخاص بي؟
الأسباب الشائعة: خمسة حقول فقط (حقل السنة ناقص، فأضف * في النهاية)، أو * في حقلي اليوم معًا (يجب أن يكون أحدهما ?)، أو استخدام 0 للأحد (يستخدم AWS القيم 1–7)، أو حقل ثوانٍ منسوخ من Quartz أو Spring.
ما المنطقة الزمنية لجداول كرون في EventBridge؟
تستخدم قواعد EventBridge توقيت UTC دائمًا، فالتعبير cron(0 8 * * ? *) يعمل الساعة 08:00 بتوقيت UTC، أي 11:00 بتوقيت الرياض. أما EventBridge Scheduler فيقبل منطقة زمنية مثل Asia/Riyadh ويراعي التوقيت الصيفي.
ما الفرق بين cron() وrate() في AWS؟
يعمل rate(5 minutes) بفاصل ثابت يُحسب من لحظة إنشاء الجدول، أما cron(…) فيعمل في أوقات محددة من التقويم، مثل الساعة 08:00 من الإثنين إلى الجمعة أو آخر يوم من الشهر.
مولدات كرون لمنصات أخرى
*/15 8-18 * * 1-5
مولد تعبيرات كرون Quartz
0 0 8 ? * MON-FRI
مولد تعبيرات كرون لـ Spring
0 0 8 * * MON-FRI
مولد تعبيرات كرون لـ Jenkins
H 2 * * 1-5
مولد تعبيرات كرون لـ Salesforce
0 0 8 ? * MON-FRI
مولد تعبيرات كرون لـ Hangfire
0 8 * * 1-5
مولد تعبيرات كرون لـ Airflow
0 6 * * 1-5
مولد تعبيرات node-cron
0 30 8 * * 1-5