الأحرف الخاصة في Quartz: شرح L وW و#
إرشادات معمّقة على مستوى الرموز لمعاملات L وW و# في Quartz حتى تتمكن من بناء جداول زمنية دقيقة دون مفاجآت أثناء التشغيل.
افتح مولّد Quartzلماذا تُعدّ الأحرف الخاصة في Quartz مهمة
تبدأ معظم أخطاء cron قبل النشر، عندما يتباعد القصد من الجدولة عن الصياغة الفعلية. يغطي cron القياسي ذو الخمسة حقول: الدقائق والساعات ويوم الشهر والشهر ويوم الأسبوع. يوسّع Quartz هذا بإضافة حقل الثواني وحقل السنة وثلاثة أحرف خاصة — L وW و# — تتيح دقة في الجدولة لا يستطيع cron القياسي تحقيقها.
تتصرف هذه الأحرف بشكل مختلف بحسب الحقل الذي تظهر فيه، وسوء الفهم البسيط يتراكم ليُنتج جداول تُنفَّذ في اليوم الخاطئ أو تتخطى التشغيل بالكامل. يشرح هذا المقال كل حرف مع أمثلة عملية وفحوصات للتحقق وإجراءات واضحة يمكنك اتخاذها في مولّد Quartz في Cronwise.
حرف L: آخر يوم وآخر يوم من أيام الأسبوع
يرمز L إلى "الأخير" (Last) وهو صالح في حقلين: يوم الشهر ويوم الأسبوع. يتغير معناه بحسب مكان وضعه.
L في حقل يوم الشهر
عند استخدامه وحده، يعني L آخر يوم في الشهر. التعبير 0 0 18 L * ? يُنفَّذ في الساعة 6:00 مساءً في آخر يوم من كل شهر — سواء كان اليوم 28 أو 29 أو 30 أو 31. لن تحتاج أبداً لترميز أطوال الأشهر يدوياً.
يمكنك دمج L مع إزاحة سالبة. L-3 يعني ثلاثة أيام قبل آخر يوم. في شهر من 31 يوماً يُحلّ إلى اليوم 28؛ وفي فبراير من سنة غير كبيسة يُحلّ إلى اليوم 25. هذا مفيد لنوافذ قطع الفواتير.
L في حقل يوم الأسبوع
في حقل يوم الأسبوع، تقرن L برقم يوم الأسبوع: 6L يعني آخر جمعة في الشهر. التعبير 0 0 9 ? * 6L يُنفَّذ في الساعة 9:00 صباحاً في آخر جمعة من كل شهر — مفيد لمعالجة الرواتب أو تقارير نهاية الشهر التي يجب أن تقع في يوم محدد من الأسبوع.
حرف W: أقرب يوم عمل
W صالح فقط في حقل يوم الشهر. يختار أقرب يوم عمل (من الاثنين إلى الجمعة) للتاريخ المحدد. اكتب 15W لتعني "أقرب يوم عمل للخامس عشر."
كيف يُحلّ W
إذا صادف الخامس عشر يوم سبت، ينتقل الجدول إلى الجمعة الرابع عشر. وإذا صادف يوم أحد، ينتقل إلى الاثنين السادس عشر. لا يتجاوز الحل حدود الشهر أبداً: إذا كان اليوم الأول سبتاً، يُحلّ 1W إلى الاثنين الثالث، وليس إلى الجمعة السابقة.
دمج L وW
يسمح Quartz بالدمج LW، أي "آخر يوم عمل في الشهر." هذا مثالي لعمليات الإغلاق المالي في نهاية الشهر التي يجب تنفيذها في يوم عمل. إذا كان آخر يوم هو السبت، يُحلّ LW إلى الجمعة. لاحظ أن W لا يمكن دمجه مع قائمة أو نطاق — تعبيرات مثل 1W,15W غير صالحة.
حرف #: يوم الأسبوع رقم N في الشهر
# صالح فقط في حقل يوم الأسبوع ويحدد التكرار رقم N ليوم أسبوع معين ضمن الشهر. الصياغة هي day#N، حيث day هو رقم يوم الأسبوع (1–7، من الأحد إلى السبت) وN هو رقم التكرار (1–5).
أمثلة عملية
0 0 10 ? * 2#1 يُنفَّذ في الساعة 10:00 صباحاً في أول اثنين من كل شهر. 0 0 14 ? * 6#3 يُنفَّذ في الساعة 2:00 مساءً في ثالث جمعة. تحل هذه الأنماط محل الحلول البديلة الهشة التي تعتمد على نطاقات يوم الشهر والمنطق الشرطي.
عندما يتجاوز N التكرارات الفعلية
إذا حددت 2#5 (الاثنين الخامس)، فلن يُنفَّذ الجدول في الأشهر التي تحتوي على أربعة أيام اثنين فقط. يتعامل Quartz مع هذا على أنه عدم تطابق وليس خطأ — وهو تخطٍّ صامت يجعل مراقبة عدد التشغيلات أمراً ضرورياً.
لا يمكن أن يظهر حرف # في حقل يوم الشهر ولا يمكن دمجه مع القوائم أو النطاقات أو الزيادات. يقبل كل حقل يوم أسبوع تحديد # واحد على الأكثر.
السلوك الحدّي وأنماط الفشل
الأخطاء الدقيقة مع هذه الأحرف نادراً ما تُطلق أخطاء تحقق لكنها تنحرف بصمت عن القصد.
المزالق الشائعة
| التعبير | المتوقع | الفعلي | الإصلاح |
|---|---|---|---|
0 0 9 L * 6 | آخر يوم إذا كان جمعة | تعارض: كلا حقلي اليوم محددان | استخدم ? في أحد حقلي اليوم |
0 0 9 1W * ? (الأول سبت) | الجمعة السابقة | الاثنين الثالث (لا تجاوز للشهر) | تحقق بمعاينة التشغيل التالي |
0 0 9 ? * 2#5 | الاثنين الخامس شهرياً | فقط الأشهر ذات خمسة أيام اثنين | أضف مراقبة عدد التشغيلات |
0 0 9 LW * ? في فبراير | آخر يوم عمل | اليوم 26 أو 27 أو 28 حسب السنة | تحقق بمعاينة مراعية للمنطقة الزمنية |
الخطأ الأخطر هو تحديد قيم في كل من حقل يوم الشهر ويوم الأسبوع دون استخدام ? كعنصر نائب. يتطلب Quartz أن يحتوي حقل يوم واحد بالضبط على ?. حذفه ينتج خطأ تحليل أو سلوك غير محدد حسب إصدار Quartz.
إطار اتخاذ القرار: اختيار الحرف المناسب
كل حرف خاص يحل مشكلة جدولة مختلفة. يعتمد اختيار الحرف المناسب على ما إذا كان جدولك مرتبطاً بتاريخ تقويمي أو يوم عمل أو موضع نسبي ضمن الشهر.
| المتطلب | الحرف | الحقل | مثال |
|---|---|---|---|
| التشغيل في آخر يوم من كل شهر | L | يوم الشهر | 0 0 18 L * ? |
| التشغيل قبل N أيام من نهاية الشهر | L-N | يوم الشهر | 0 0 18 L-3 * ? |
| التشغيل في آخر يوم أسبوع محدد | nL | يوم الأسبوع | 0 0 9 ? * 6L |
| التشغيل في أقرب يوم عمل لتاريخ معين | W | يوم الشهر | 0 0 9 15W * ? |
| التشغيل في آخر يوم عمل من الشهر | LW | يوم الشهر | 0 0 17 LW * ? |
| التشغيل في يوم الأسبوع رقم N من الشهر | # | يوم الأسبوع | 0 0 10 ? * 2#1 |
عندما يكون متطلبك مبنياً على التاريخ فقط ("اليوم الخامس عشر")، لا تحتاج إلى أحرف خاصة على الإطلاق. استخدم W فقط عندما تكون محاذاة أيام العمل مطلوبة. استخدم # فقط عندما يكون تكرار يوم أسبوع معين أهم من تاريخ ثابت. واستخدم L عندما يجب أن تتكيف دلالات نهاية الشهر مع أطوال الأشهر المتغيرة تلقائياً.
تقوية الإنتاج: فحوصات ما قبل النشر
قبل وصول أي جدول Quartz إلى بيئة الإنتاج، نفّذ خطوات التحقق هذه لاكتشاف الحالات الحدّية التي لا يستطيع التحقق الثابت كشفها.
قائمة التحقق
| الفحص | لماذا يهم | معايير النجاح |
|---|---|---|
| التحليل بدون أخطاء | يؤكد الصلاحية النحوية | لا استثناءات من المحلل |
| فحص التشغيلات العشر التالية | يكشف مفاجآت حدود الأشهر | جميع التواريخ تطابق القصد |
| التحقق من محاذاة المنطقة الزمنية | عدم تطابق المنطقة الزمنية للخادم والعمل | التشغيلات تطابق المنطقة الزمنية المستهدفة |
تأكيد وضع ? | تفعيل كلا حقلي اليوم غير محدد | أحد حقلي اليوم يحتوي على ? |
| التحقق من التخطي الصامت | #5 قد يُنفَّذ أقل من 12 مرة/سنة | العدد السنوي موثّق |
تعرض معاينة التشغيل التالي في Cronwise التنفيذات العشر التالية في المنطقة الزمنية المختارة، مما يتيح لك التحقق من هذه المعايير دون نشر مهمة تجريبية. إذا كان فريقك يعمل عبر مناطق زمنية متعددة، راجع شرح المناطق الزمنية في Cron للفرق العالمية لإرشادات إضافية.
تجميع كل شيء معاً
تمنحك أحرف L وW و# في Quartz قوة جدولة لا يستطيع cron القياسي مطابقتها. L يتكيف مع أطوال الأشهر المتغيرة، وW يحاذي التنفيذ مع أيام العمل، و# يثبّت التشغيلات على تكرارات أيام أسبوع محددة. عند استخدامها بشكل صحيح، تُزيل الحلول البديلة الهشة وتجعل قصد الجدولة واضحاً في التعبير نفسه.
قواعد القرار الأساسية بسيطة. استخدم L لمنطق نهاية الشهر. استخدم W عندما تحتاج أقرب يوم عمل. استخدم # ليوم الأسبوع رقم N من الشهر. ضع دائماً ? في حقل اليوم الذي لا تستخدمه. وتحقق دائماً بمعاينة التشغيل التالي قبل النشر.
هل أنت مستعد لبناء أو التحقق من جدول Quartz الخاص بك؟ افتح مولّد Quartz في Cronwise لبناء التعبيرات بصرياً ورؤية شروحات بلغة واضحة ومعاينة أوقات التنفيذ في المنطقة الزمنية المستهدفة. لمزيد من أدلة جدولة cron والشروحات المعمّقة، تصفح جميع مقالات cron على Cronwise.