العربية

أدوات المطورين · مولد Crontab

يوم من الشهر مقابل يوم من الأسبوع في cron: قاعدة OR التي تفاجئ الجميع

· كيف يعمل

كرون تقويم جدولة

يتم ربط مرشحي تقويم من خلال بوابة OR في جدول واحد
الرسم التوضيحي المتجه الأصلي ToolAcre

عندما يتم تقييد كلا حقلي اليوم، يقوم cron بتشغيل المهمة إذا كان أي منهما متطابقًا. يشرح هذا المنشور القاعدة من crontab(5) وسبب وجودها وكيفية الحصول على الجداول التي تمنعها.

يتم تشغيل التقرير في اليوم الأول وفي كل يوم اثنين — التعبير 0 9 1 * 1 لا يعني ما يبدو عليه.

يبدو تعبير مثل `0 9 1 * 1` مثل "09:00 في أول يوم اثنين" إذا تمت قراءة أعمدة اليومين كمرشحات تراكمية. ToolAcre لا يقرأها بهذه الطريقة. مع تعيين يوم من الشهر على 1 وتعيين يوم من الأسبوع على يوم الاثنين، يحذر المحلل اللغوي من إمكانية تطابق أي من الشرطين، وبالتالي فإن الجدول يتضمن كل أول وكل يوم اثنين.

هذا ليس تفضيلًا بسيطًا للصياغة. يمكن تشغيل التقرير الشهري أربع أو خمس مرات إضافية، ويمكن أيضًا تنفيذ العملية المتوقعة في أيام الاثنين فقط في اليوم الأول من الشهر. يضع المولد تحذير "يستحق التحقق" بجانب الوصف بحيث يكون السلوك الموسع مرئيًا قبل نسخ التعبير إلى crontab خارجي.

القاعدة كما هي مكتوبة — إذا كان كل من يوم الشهر ويوم الأسبوع مقيدًا، فسيتم تشغيل الأمر عندما يتطابق أي من الحقلين

تعالج وظيفة التنفيذ `dayMatches` أربع حالات بشكل صريح. يتم قبول حرفي بدل في كل تاريخ؛ يوم البدل من الشهر يؤجل إلى أيام الأسبوع؛ يوم البدل في أيام الأسبوع يؤجل إلى يوم من الشهر؛ ويعيد الحقلان المقيدان قيمة OR المنطقية لمطابقاتهما. تغطي الاختبارات تاريخًا مطابقًا لليوم الثالث عشر فقط، والجمعة فقط ولا يوجد أي شرط.

الأوصاف تحافظ على نفس القاعدة. يتم تقديم `0 0 13 * 5` مع "في اليوم الثالث عشر من الشهر أو يوم الجمعة"، وليس اقترانًا غامضًا. يستخدم التحليل واختيار التشغيل التالي والإخراج باللغة الإنجليزية نفس التفسير. يعد هذا السلوك المشترك دليلًا أقوى من تصنيف المساعدة المعزول، لأن الخلاف بين تلك المسارات سيؤدي على الفور إلى إنشاء معاينات مضللة.

ينفذ المحلل اللغوي OR ويكشف النتيجة؛ ولا يحدد تاريخ القاعدة

قدم مخطط المصنف سببًا تاريخيًا لتصميم غرفة العمليات، لكن هذا المستودع يثبت السلوك وليس المصدر. تحدد تعليقات التعليمات البرمجية قاعدة نمط Vixie، وتحدد الاختبارات النتيجة التي تم تصميمها بواسطة ToolAcre. وهي لا توثق من اختار القاعدة، أو متى تم اعتمادها، أو سبب تفضيل التفسير المتساهل.

الحفاظ على هذه الحدود مهم في الكتابة الفنية. يحتاج القراء إلى معرفة بالضبط كيف تعمل هذه الأداة على توسيع التعبير؛ فهم لا يحتاجون إلى سرد للمعايير المخترعة لاستخدامها بأمان. إذا كان هدف النشر يوثق دلالات يومية مختلفة، فإن الدليل الخاص به يتفوق على معاينة المتصفح هذه. ToolAcre يوضح اللهجة التي يحسبها بدلاً من المطالبة بموافقة كل برنامج جدولة.

مثال عملي: تعداد 0 9 1 * 1 لمدة شهر واحد - الأيام التي يتم فيها إطلاق النار، مقارنة بالجدول الزمني الذي أراده المؤلف

النظر في الشهر الذي يومه الأول ليس يوم الاثنين. `0 9 1 * 1` ينتج تشغيلًا واحدًا في المرة الأولى وعمليات التشغيل الإضافية كل يوم اثنين. إذا كان الأول نفسه هو يوم الاثنين، فسيظل هذا التاريخ يظهر مرة واحدة لأن بحث التشغيل التالي يأخذ في الاعتبار دقيقة تقويمية واحدة، وليس مشغلين منفصلين. يتغير حجم الاتحاد مع التقويم ولكن ليس في المنطق.

يمكنك فحص هذا الاتحاد عن طريق اختيار منطقة زمنية وقراءة الأشواط الخمسة التالية. تبدأ المعاينة بدقة بعد اللحظة الحالية وتبحث عن تواريخ التقويم، مع تطبيق حقول الشهر واليوم والوقت. لا يعد بشهر محدد في نثر المقالة لأن القائمة المباشرة تعتمد على متى وأين يقوم القارئ بإجراء الفحص.

AND-الحلول البديلة لأوامر يوم الاثنين الأول تقع خارج منشئ الجدول هذا

اقترحت الخطة تضمين اختبار تاريخ الصدفة للحصول على سلوك AND. لا يمكن لـ ToolAcre التحقق من مثل هذا الأمر: فهو يقبل فقط حقول الجدول الخمسة، ويحتوي السطر الكامل المنسوخ على عنصر نائب قابل للتنفيذ. إن بناء جملة Shell، والنسبة المئوية للهروب، وتوافر الأوامر، وسلوك الخروج، كلها تنتمي إلى البيئة التي تدير المهمة في النهاية.

ضمن هذا المولد، تتمثل خطوة التصميم الآمن في ترك حقل ليوم واحد كـ `*` ما لم يكن المقصود من اتحاد OR حقًا. بالنسبة لمتطلبات يوم الاثنين الأول، قم بتوثيق أن كرون ذو الخمسة حقول وحده لا يعبر عن التقاطع في هذه اللهجة. اختر حلاً خاصًا بالبيئة واختبره بشكل منفصل بدلاً من تقديم مقتطف غير منفذ على أنه مضمون.

لا يتم تفسير مشغلي الجدولة الآخرين بواسطة هذا المحلل اللغوي المكون من خمسة حقول

تعرض بعض القواعد النحوية للجدولة عوامل تشغيل مثل `#`، أو `L`، أو `W`، أو `?`، لكن هذا المحلل لا يقبل أيًا منها. كما أنها ترفض ستة حقول وتوضح أن عقدها هو بناء جملة crontab المكون من خمسة حقول. لذلك، لا يمكن لصق التعبير الذي يعمل في منتج آخر هنا كدليل على وجود نفس قاعدة التقويم.

تبدأ ترجمة اللهجات بتحديد القواعد النحوية المصدر والهدف، وليس عن طريق حذف علامات الترقيم حتى ينجح التحقق من الصحة. يمكن أن يساعد ToolAcre في إنشاء الحقول والأسماء والنطاقات والقوائم والخطوات الخمسة العادية للهدف. ولا يمكنها الحفاظ على الدلالات التي يحملها مشغل غير مدعوم، وتتجنب المقالات عمدًا وصف هؤلاء المشغلين الأجانب كما لو تم تنفيذها.

يعد هروب الأوامر خارج القواعد النحوية للتعبير فقط

تظهر علامات النسبة المئوية وعلامات اقتباس الأوامر بعد الجدول وتكون خارج `parseCron`. يقوم المحلل اللغوي بتقسيم تعبير واحد إلى خمسة أجزاء مفصولة بمسافات بيضاء بالضبط؛ فهو لا يقرأ أبدًا خط أنابيب Shell أو أمر التاريخ أو حمولة الأمر النافعة. وبالتالي، لا تعلم هذه المقالة حلاً بديلاً لعلامة النسبة المئوية على الرغم من أن المصنف يقترح واحدًا.

وهذا الإغفال هو القرار الصحيح. يجب ألا تشير أداة الجدولة إلى أن الأمر آمن لأن حقول التوقيت الخاصة به يتم التحقق من صحتها. قم بمراجعة بناء جملة الأمر في تنفيذ cron الفعلي والقشرة، مع مدخلات غير ضارة ومخرجات يمكن ملاحظتها. حافظ على نطاق نتائج المولد وفقًا لقاعدة التقويم التي يفهمها بشكل واضح.

الخلاصة: قم بتقييد حقل يوم واحد، وليس كليهما - وشرح المولد يجعل OR مرئيًا قبل حفظ السطر

عندما يكون كلا الحقلين اليوميين مقيدين، اقرأهما كإتحاد وقل "أو" بصوت عالٍ. والأفضل من ذلك، فحص تحذير المولد وعمليات التشغيل القادمة. إذا تجاوزت هذه التواريخ المجموعة المقصودة، قم بإرجاع حقل واحد إلى `*` وحل أي متطلبات أكثر تخصصًا باستخدام آلية موثقة بواسطة البيئة المستهدفة.

الدرس الأساسي ليس أن كرون غامض؛ وهو أن عمودين متجاورين لا يجتمعان مثل القيود الأخرى. ToolAcre يقوم بتركيز هذا الاستثناء في منطق التحليل والوصف والمعاينة. استخدم طرق العرض الثلاثة هذه لاكتشاف عدم التطابق قبل أن يغادر التعبير المتصفح ويصبح جدولاً تشغيليًا.