Quartz مقابل Cron القياسي: الاختلافات الرئيسية
دليل قرار موجز لاختيار لهجة cron المناسبة وتجنب عدم تطابق المحلل.
افتح شارح Quartzلماذا تهم لهجة Cron
معظم أخطاء cron تبدأ قبل النشر، عندما تتباعد نية الجدول والصيغة. إذا كتبت تعبير cron لمحلل قياسي من 5 حقول ونشرته على مجدوِل قائم على Quartz، النتيجة ليست مجرد خطأ صيغة. تتغير مواقع الحقول، وتُفسّر الرموز خطأً، وقد يعمل الجدول في أوقات خاطئة تماماً أو يفشل بصمت دون أي ملاحظات مفيدة.
الارتباك ينبع من حقيقة بسيطة: لا توجد صيغة "cron" واحدة. يستخدم crontab يونكس الأصلي خمسة حقول (الدقيقة، الساعة، يوم الشهر، الشهر، يوم الأسبوع). يمد Quartz Scheduler هذا إلى ستة أو سبعة حقول بإضافة الثواني في البداية وسنة اختيارية في النهاية. كلاهما يُسمى "تعبيرات cron"، لكنهما غير متوافقين بنيوياً. خلطهما هو السبب الأول لإخفاقات الجدولة المتعلقة باللهجة.
يشرح هذا المقال الاختلافات الرئيسية مع أمثلة عملية وفحوصات التحقق وخطوات تالية واضحة في Cronwise. الصق أي تعبير في شارح Quartz لرؤية معناه فوراً.
بنية الحقول: 5 حقول مقابل 7 حقول
الاختلاف الأكثر جوهرية بين اللهجتين هو عدد الحقول ومواقعها. يستخدم cron القياسي بالضبط خمسة حقول:
| الموقع | الحقل | القيم المسموحة |
|---|---|---|
| 1 | الدقيقة | 0-59 |
| 2 | الساعة | 0-23 |
| 3 | يوم الشهر | 1-31 |
| 4 | الشهر | 1-12 |
| 5 | يوم الأسبوع | 0-7 (0 و7 = الأحد) |
يضيف Quartz cron حقل الثواني في البداية وحقل السنة الاختياري في النهاية:
| الموقع | الحقل | القيم المسموحة |
|---|---|---|
| 1 | الثواني | 0-59 |
| 2 | الدقائق | 0-59 |
| 3 | الساعات | 0-23 |
| 4 | يوم الشهر | 1-31 |
| 5 | الشهر | 1-12 أو JAN-DEC |
| 6 | يوم الأسبوع | 1-7 أو SUN-SAT |
| 7 | السنة (اختياري) | 1970-2099 |
هذا التحول الموقعي هو أكثر مصادر الأخطاء عبر اللهجات شيوعاً. تعبير قياسي مثل 0 9 * * MON (كل اثنين في 09:00) يصبح 0 0 9 ? * MON * في Quartz. إذا لصقت النسخة القياسية في محلل Quartz، يُقرأ 0 كثوانٍ و9 كساعات و* كيوم الشهر، مما ينتج جدولاً مختلفاً تماماً.
رموز Quartz الحصرية: ? وL وW و#
بالإضافة إلى الحقول الإضافية، يقدم Quartz أربعة أحرف خاصة غير موجودة في cron القياسي. تتيح هذه الرموز أنماط جدولة يستحيل التعبير عنها في crontab من 5 حقول.
رمز ? (بدون قيمة محددة) مطلوب في حقل يوم الشهر أو يوم الأسبوع. لا يسمح Quartz لكلا الحقلين باستخدام قيم محددة في وقت واحد. cron القياسي ليس لديه مثل هذا القيد، لذا بعض التعبيرات القياسية تحتاج إعادة هيكلة لـ Quartz.
رمز L (الأخير) يستهدف آخر يوم في الشهر أو آخر يوم عمل محدد. على سبيل المثال، L في يوم الشهر يعني اليوم الأخير (28-31 حسب الشهر)، و5L في يوم الأسبوع يعني آخر خميس.
رمز W (يوم العمل) يحدد أقرب يوم عمل ليوم معين في الشهر. 15W يعني أقرب يوم عمل لليوم 15. إذا كان 15 سبتاً، تعمل المهمة يوم الجمعة 14. مفيد لجدولة أيام العمل.
رمز # (التكرار النوني) يستهدف تكرار يوم أسبوع محدد ضمن شهر. 6#3 يعني الجمعة الثالثة. cron القياسي لا يوفر طريقة مدمجة للتعبير عن هذا النمط.
تفسير الجداول الحقيقية: أمثلة جنباً إلى جنب
رؤية اللهجتين بالتوازي يجعل الاختلافات ملموسة. إليك متطلبات جدولة شائعة معبر عنها بكلتا الصيغتين:
| النية | Cron القياسي | Quartz Cron | الاختلاف الرئيسي |
|---|---|---|---|
| كل يوم عند منتصف الليل | 0 0 * * * | 0 0 0 * * ? * | بادئة الثواني؛ ? في يوم الأسبوع |
| أيام العمل في 09:30 | 30 9 * * 1-5 | 0 30 9 ? * MON-FRI * | بادئة الثواني؛ ? في يوم الشهر؛ أسماء الأيام |
| أول كل شهر في 06:00 | 0 6 1 * * | 0 0 6 1 * ? * | بادئة الثواني؛ ? تحل محل حرف البدل في يوم الأسبوع |
| كل 15 دقيقة خلال ساعات العمل | */15 9-17 * * 1-5 | 0 0/15 9-17 ? * MON-FRI * | حقل الثواني؛ اختلافات صيغة الخطوة؛ ? إلزامي |
| آخر يوم من كل شهر في الظهر | غير مدعوم أصلياً | 0 0 12 L * ? * | رمز L حصري لـ Quartz |
الصف الأخير يبرز فجوة في القدرات. cron القياسي لا يمكنه التعبير أصلياً عن "آخر يوم في الشهر." يتعامل Quartz معه برمز L واحد. ميزة هذا النمط هي سبب تبني العديد من المنصات المؤسسية للهجة Quartz رغم تعقيدها الإضافي.
الحالات الاستثنائية والمخاطر الشائعة
اختلافات اللهجة تنشئ حالات استثنائية خفية تجتاز فحوصات الصيغة الأساسية لكنها تسبب مشاكل وقت التشغيل:
عدم تطابق ترقيم أيام الأسبوع. يستخدم cron القياسي 0-7 حيث كلاً من 0 و7 يمثلان الأحد. يستخدم Quartz 1-7 حيث 1 هو الأحد و7 هو السبت. التعبير * * * * 5 (الجمعة في cron القياسي) يصبح 0 * * ? * 6 * في Quartz. الخطأ في هذا ينقل مهمتك بيوم واحد.
غياب ? يسبب الرفض. يتطلب Quartz ? في بالضبط أحد حقلي اليوم. استخدام * في كليهما غير صالح في Quartz، رغم أنه صالح تماماً في cron القياسي.
غموض حقل السنة. مع ستة رموز، بعض محللات Quartz تعامل السادس كيوم الأسبوع بينما يحلله آخرون كسنة. يدعم Cronwise أوضاع تحليل standard5 وwithSeconds6 وquartz7 صراحةً لإزالة هذا الغموض.
تحولات المنطقة الزمنية عند ترحيل اللهجة. تغيير لهجة cron غالباً يعني تغيير منصة المجدوِل، والتي قد تكون لها منطقة زمنية افتراضية مختلفة. جدول كان يعمل بشكل صحيح في crontab مهيأ بتوقيت UTC قد يعمل في الوقت الخطأ في مجدوِل Quartz يستخدم المنطقة الزمنية لـ JVM. لمزيد عن هذه المخاطر، اقرأ شرح المناطق الزمنية في Cron للفرق العالمية.
اختيار اللهجة المناسبة
قرار اللهجة يُحركه منصتك وليس تفضيلك الشخصي. اختيار الصيغة الخاطئة لا يسبب أخطاء تحليل فحسب؛ بل يمكن أن ينتج جداول خاطئة بصمت تبدو صالحة لكنها تعمل في الأوقات الخاطئة.
استخدم cron القياسي من 5 حقول عندما:
- مجدوِلك هو برنامج cron في Unix/Linux، أو مؤقت systemd، أو خدمة cron سحابية تقبل صيغة 5 حقول.
- لا تحتاج دقة أقل من دقيقة أو رموز استهداف يوم متقدمة.
- يعمل فريقك بشكل أساسي في سياق shell أو DevOps حيث cron القياسي هو اللهجة المشتركة.
استخدم Quartz cron عندما:
- مجدوِلك هو Quartz Scheduler أو Spring Boot أو إطار عمل JVM آخر.
- تحتاج دقة بالثانية أو رموز مثل
LوWو#لمنطق آخر يوم أو أقرب يوم عمل أو يوم الأسبوع النوني.
إذا لم تكن متأكداً أي لهجة تتوقعها منصتك، تحقق من وثائق المجدوِل لعدد الحقول. خمسة حقول تعني القياسي. ستة أو سبعة حقول (تبدأ بالثواني) تعني Quartz. يحدد Cronwise اللهجة تلقائياً عندما تلصق تعبيراً، لكن معرفة الصيغة المتوقعة يمنع الارتباك من المصدر.
التطبيق في سير عمل Cronwise
يوفر Cronwise أدوات مخصصة لكلتا اللهجتين حتى لا تحتاج أبداً للتخمين أو التحويل ذهنياً بين الصيغ. إليك سير عمل التحقق الموصى به قبل نشر أي جدول cron:
قائمة التحقق
| الفحص | لماذا يهم | معايير النجاح |
|---|---|---|
| تأكيد اللهجة | المحلل الخطأ ينتج نتائج خاطئة | عدد الحقول يتطابق مع مجدوِلك (5 مقابل 6/7) |
| التحقق من التعبير | يكتشف أخطاء الصيغة والرموز في غير مكانها | لا أخطاء أو تحذيرات في تحقق Cronwise |
| قراءة الشرح بلغة واضحة | يكشف عدم تطابق النية قبل النشر | الشرح يتطابق مع هدف جدولتك |
| مراجعة معاينة أوقات التشغيل القادمة | الطوابع الزمنية الملموسة تكشف الحالات الاستثنائية | أقرب 10 تشغيلات تقع في النوافذ المتوقعة |
| التحقق من المنطقة الزمنية | المنطقة الزمنية للمجدوِل قد تختلف عن توقيتك المحلي | منطقة المعاينة الزمنية تتطابق مع مجدوِل الإنتاج |
| الحفظ والتوثيق | إعادة الاستخدام ومسار التدقيق للتعاون مع الفريق | التعبير محفوظ بملاحظة وصفية |
ابدأ بـشارح Quartz لفك ترميز تعبير موجود، أو استخدم مولّد Quartz لبناء واحد جديد بصرياً. لـ cron القياسي، يتبع شارح الصفحة الرئيسية والمولّد نفس سير العمل بصيغة 5 حقول.
الملخص والخطوات التالية
الاختلافات الجوهرية بين Quartz وcron القياسي تتلخص في ثلاث مجالات: عدد الحقول (5 مقابل 6/7)، والرموز الخاصة (? وL وW و#)، وترقيم أيام الأسبوع (0-7 مقابل 1-7). كل اختلاف آخر ينبع من هذه التباينات البنيوية. معرفة أي لهجة يتوقعها مجدوِلك والتحقق مقابل المحلل الصحيح يزيل الفئة الأكثر شيوعاً من أخطاء الجدولة.
قبل نشر أي جدول، مرّ عبر قائمة التحقق أعلاه. تأكد من اللهجة، وتحقق من التعبير، واقرأ الشرح بلغة واضحة، وراجع الطوابع الزمنية لأوقات التشغيل القادمة في منطقة الإنتاج الزمنية، واحفظ النتيجة بملاحظة وصفية لفريقك.
لاستكشاف أعمق، اقرأ دليلنا حول أحرف Quartz الخاصة لإتقان صيغة L وW و#. إذا كان سلوك المناطق الزمنية مصدر قلق، يغطي شرح المناطق الزمنية في Cron للفرق العالمية فروقات UTC وحالات التوقيت الصيفي الاستثنائية واستراتيجيات الجدولة المدركة للمنطقة الزمنية. تصفح جميع مقالات cron لمتابعة التعلم.