محلل تعبيرات Cron

الصيغة: minute hour day-of-month month day-of-week

تَرِث ملف crontab وتجده مليئًا بأسطر مثل 0 */2 * * 1-5، 15 4 1 * *، */30 8-18 * * *. يأخذ هذا المحلل تعبير cron قياسيًا من 5 حقول ويعيد وصفًا بالإنجليزية الواضحة (“every 2 hours on weekdays”) بالإضافة إلى المرات الخمس التالية التي سيُشغَّل فيها فعليًا. مفيد لفهم الجداول الزمنية القديمة والتحقق من جدول جديد قبل نشره.

كيفية تحليل تعبير cron

  1. 1

    لصق التعبير

    تعبير قياسي من 5 حقول (`* * * * *`): الدقيقة والساعة ويوم الشهر والشهر ويوم الأسبوع.

  2. 2

    قراءة الوصف بالإنجليزية

    يعيد المحلل صياغة كل حقل بالإنجليزية الواضحة، على سبيل المثال "At minute 0, every 2 hours, on day(s) of week 1-5."

  3. 3

    التحقق من خلال معاينة التشغيل التالي

    5 مواعيد تشغيل قادمة. إذا لم تتطابق مع ما تقصده، فحسّن التعبير.

  4. 4

    تصحيح الحقول غير الصالحة

    يُرفض التعبير الذي يحتوي عدد حقول خاطئًا أو قيمًا خارج النطاق، مع رسالة خطأ تسمّي الحقل المسبب للمشكلة.

فك تشفير كل حقل

يحتوي كل حقل على نطاق صالح وأحرف خاصة خاصة به:

الحقل النطاق أحرف البدل المدعومة
الدقيقة 0-59 * , - /
الساعة 0-23 * , - /
يوم من الشهر 1-31 * , - /
الشهر 1-12 * , - /
يوم الأسبوع 0-7 * , - /
  • * = أي قيمة (* في حقل الدقائق يعني كل دقيقة).
  • 1,5,10 = قائمة قيم.
  • 1-5 = نطاق قيم.
  • */15 أو 0-45/15 = خطوة تُحسب من بداية نطاق الحقل.
  • يوم الأسبوع 0 و7 كلاهما يعني الأحد، لذا تُقبل الصيغتان. أسماء الأشهر والأيام مثل JAN أو MON غير مقبولة؛ استخدم الأرقام.

أمثلة تم فك تشفيرها

التعبير بالإنجليزية
0 */2 * * 1-5 At minute 0 every 2 hours, Monday through Friday
15 4 1 * * At 04:15 on the 1st day of every month
*/30 8-18 * * * Every 30 minutes between 08:00 and 18:59
0 0 1,15 * * At midnight on the 1st and 15th of every month
0 22 * * 0 At 22:00 every Sunday

ما يقبله المحلل

  • 5 حقول بالضبط: الدقيقة والساعة ويوم الشهر والشهر ويوم الأسبوع. تُرفض تعبيرات Quartz ذات الستة أو السبعة حقول (التي تحتوي ثوانٍ أو سنة).
  • نطاقات صالحة: يجب أن تقع كل قيمة ضمن حقلها، مثل الدقيقة 0-59 والساعة 0-23 ويوم الشهر 1-31 والشهر 1-12 ويوم الأسبوع 0-7.
  • خطوات موجبة: يجب أن تكون القيمة بعد / رقمًا موجبًا (*/0 يُرفض).
  • لا اختصارات مسماة: @daily و@reboot وما شابهها غير مقبولة. وسّعها أولًا إلى صيغتها من 5 حقول (مثل @daily = 0 0 * * *).

الجمع بين يوم الشهر ويوم الأسبوع

عند ضبط يوم الشهر ويوم الأسبوع معًا، يخطط هذا المحلل للتشغيل فقط عندما يتطابق كلاهما، لذا فإن 0 0 1 * MON يُشغَّل فقط عندما يصادف اليوم الأول يوم الاثنين. أما معظم تطبيقات cron في لينكس فتعامل الحقلين كـ OR (يُشغَّل العمل عند تطابق أي منهما). لذلك تحقق من التعبير مقابل الجدولة التي تستخدمها فعلًا.

ملاحظة حول المنطقة الزمنية

تُحسب أوقات المعاينة وفق ساعة الخادم، التي تعمل بتوقيت UTC. إذا كان crontab لديك يعمل على جهاز بمنطقة زمنية مختلفة، فقد تختلف الأوقات المعروضة هنا عن أوقات ذلك الجهاز.

الأسئلة الشائعة

لا. تُقبل تعبيرات cron القياسية من 5 حقول فقط. تُرفض تعبيرات Quartz التي تتضمن ثوانٍ (6 حقول) أو سنة (7 حقول) برسالة خطأ.

عادةً لأحد هذه الأسباب: المعاينة تستخدم ساعة الخادم بتوقيت UTC بينما يعمل crontab لديك في منطقة زمنية أخرى؛ أو ضبط كل من يوم الشهر ويوم الأسبوع معًا (يشترط هذا المحلل تطابق كلاهما)؛ أو خطوة تُعاد من بداية كل ساعة أو يوم.

نعم، إذا كان تعبيرًا قياسيًا من 5 حقول، وهو ما تستخدمه Kubernetes (بتوقيت UTC افتراضيًا). ضع في اعتبارك أن المعاينة هنا تستخدم ساعة الخادم بتوقيت UTC: إذا كانت المجموعة تعمل في منطقة زمنية مختلفة، فقد تختلف الأوقات.

يقبل cron في لينكس اختصارات مسماة: @reboot (عند بدء التشغيل)، @yearly / @annually (0 0 1 1 *)، @monthly، @weekly، @daily، @hourly. لا يقبلها هذا المحلل، لذا وسّع الاختصار إلى تعبيره المكافئ من 5 حقول قبل لصقه هنا.

أدوات ذات صلة

الأداة متاحة بلغات أخرى