Utilia

مولّد تعبيرات Cron

أنشئ تعبير cron حقلًا بحقل، واقرأ شرحه، واعرض مواعيد تشغيله التالية في أي منطقة زمنية، وحوّله إلى صيغ systemd وQuartz وAWS.

المُنشئ

الحقلالنمطالقيمة
الدقيقة0–59
الساعة0–23
يوم الشهر1–31، L
الشهر1–12 أو JAN–DEC
يوم الأسبوع0–7 (0 و7 = الأحد) أو SUN–SAT

كيفية إنشاء تعبير cron

  1. اكتب تعبيرًا أو الصقه في حقل تعبير Cron، أو اختر واحدًا من قوالب جاهزة. تُقبل أيضًا الاختصارات مثل @daily و@weekly.
  2. أو استخدم المُنشئ: اختر لكل حقل النمط (كل قيمة أو كل N أو قيم محددة أو نطاق أو مخصص) ثم املأ القيمة. يتحدّث التعبير أثناء عملك، وتعديل التعبير يحدّث المُنشئ بدوره.
  3. فعّل إضافة حقل للثواني (6 حقول) إذا كان المُجدوِل لديك يدعم الثواني.
  4. اقرأ الجدول في قسم بكلمات بسيطة، ثم راجع قائمة مواعيد التشغيل التالية. اختر المنطقة الزمنية للخادم الذي ينفّذ المهمة، وحدّد العدد المطلوب من المواعيد.
  5. انسخ التعبير بزر نسخ، أو استخدم إحدى صيغ أخرى.

تُشرح الأخطاء حقلًا بحقل، مثل «الدقيقة: القيمة 61 خارج النطاق (0–59)»، فتعرف بدقة ما يجب تصحيحه.

ملاحظة حول اللغة: الوصف النصي في قسم بكلمات بسيطة يظهر بالعربية في هذه الصفحة، وتُعرض تواريخ مواعيد التشغيل التالية بتنسيق التاريخ العربي في متصفحك.

حقول cron الخمسة

يتكوّن سطر cron القياسي (Vixie) من خمسة حقول يليها الأمر:

الحقل القيم المسموحة
الدقيقة 0–59
الساعة 0–23
يوم الشهر 1–31
الشهر 1–12 أو JAN–DEC
يوم الأسبوع 0–7 (0 و7 يعنيان الأحد) أو SUN–SAT

يقبل كل حقل * (كل القيم)، أو قائمة 1,15، أو نطاقًا 9-17، أو خطوة */15 (كل 15 وحدة)، أو نطاقًا مع خطوة 0-30/10. فالتعبير */15 9-17 * * 1-5 يعني: كل 15 دقيقة من 9:00 حتى 17:45، من الاثنين إلى الجمعة.

قاعدة واحدة تفاجئ كثيرين: عندما يُقيَّد يوم الشهر ويوم الأسبوع معًا، يُنفّذ cron الكلاسيكي المهمة عند تطابق أيٍّ منهما. فالتعبير 0 0 13 * 5 يعمل في اليوم 13 من كل شهر وفي كل يوم جمعة، لا في يوم الجمعة الموافق 13 فقط. وتعرض الأداة تحذيرًا في هذه الحالة.

مواعيد التشغيل التالية والمناطق الزمنية

يعتمد cron على ساعة الجهاز، أو على إعداد CRON_TZ/TZ في ملف crontab. تُحسب قائمة مواعيد التشغيل التالية للمنطقة الزمنية التي تختارها، مع مراعاة تغييرات التوقيت الصيفي: عند تقديم الساعة في الربيع قد تُتخطّى مهمة مضبوطة على 2:30، وفي الخريف قد تُنفّذ مرة أو مرتين بحسب التطبيق. وللمهام التي يجب أن تُنفّذ مرة واحدة بالضبط، اختر أوقاتًا خارج الفترة 1:00–3:00 أو استخدم UTC.

Vixie cron ومؤقتات systemd وQuartz وAWS

  • مؤقتات systemd تستخدم OnCalendar= بصياغة مختلفة: Mon..Fri *-*-* 09..17:00/15:00. وتُدمج فيها شروط يوم الأسبوع والتاريخ بـ«و» لا بـ«أو»، لذا لا يوجد مكافئ مطابق لبعض تعبيرات cron.
  • Quartz وSpring تضعان حقل الثواني أولًا وقد تضيفان حقلًا للسنة. ويجب أن يكون أحد حقلي اليوم ?، كما يرقّم Quartz أيام الأسبوع من 1 إلى 7 بدءًا من الأحد، على خلاف 0–6 في cron. لذلك تكتب الأداة أيام الأسبوع بأسمائها (MON-FRI) تجنبًا لهذا الفخ.
  • AWS EventBridge يستخدم cron(minutes hours day month weekday year): ستة حقول دون ثوانٍ، مع ? في أحد حقلي اليوم وسنة في النهاية.

لا يحتوي cron القياسي على حقل للثواني. أما الصيغة ذات الحقول الستة مع الثواني فتدعمها مكتبات كثيرة (node-cron وSpring وQuartz)، لكن لا يدعمها crontab النظام.

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

كيف أشغّل مهمة كل 5 دقائق؟

استخدم */5 * * * *. تُنفّذ المهمة عند الدقائق 0 و5 و10… من كل ساعة.

كيف أشغّل مهمة في آخر يوم من الشهر؟

تقبل مُجدوِلات كثيرة الحرف L في حقل يوم الشهر: 0 18 L * *. أما مع Vixie cron العادي، فشغّل المهمة يوميًا في الأيام 28–31 وتحقّق داخل السكربت مما إذا كان الغد هو اليوم الأول من الشهر.

ماذا يفعل @reboot؟

يُنفّذ الأمر مرة واحدة عند بدء خدمة cron. ليس له جدول زمني، لذا لا تستطيع الأداة عرض مواعيد تشغيله.

لماذا لا تعمل مهمتي في الوقت المعروض؟

تحقّق من المنطقة الزمنية للخادم، ومن الفرق بين crontab المستخدم وملف /etc/crontab (الذي يتضمن حقلًا إضافيًا لاسم المستخدم)، ومن متغيّر PATH: فـcron يبدأ ببيئة تشغيل محدودة جدًا.

هل الأحد هو 0 أم 7؟

كلاهما. في حقل يوم الأسبوع، يعني 0 و7 يوم الأحد، و1 هو الاثنين، و6 هو السبت.

هل تُرسل تعبيراتي إلى خادم؟

لا. يجري التحليل وحساب المواعيد والتحويل بين الصيغ كله داخل متصفحك، فلا يغادر أي شيء جهازك.