Cronwise

الأحرف الخاصة في 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.