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

أنشئ جدولة crontab من قوائم منسدلة — الدقيقة، الساعة، اليوم، الشهر، يوم الأسبوع — مع شرح بلغة واضحة وقوالب جاهزة شائعة.

1,000 مشاهدة

تعبير Cron * * * * *
بصيغة نصية واضحة

كيف تعمل الأداة

يُجدوِل تعبير cron مهمة متكررة باستخدام خمسة حقول مفصولة بمسافات، دائمًا بالترتيب نفسه: الدقيقة · الساعة · يوم الشهر · الشهر · يوم الأسبوع. يقبل كل حقل قيمة أو أحد الرموز الخاصة الأربعة: * تعني "كل قيمة ممكنة"؛ */15 تعني "كل 15 وحدة، بدءًا من الحد الأدنى للحقل"؛ 1,15,30 قائمة صريحة؛ 1-5 نطاق شامل. عند القراءة من اليسار إلى اليمين، يعني 0 9 * * 1-5 "عند الدقيقة 0 من الساعة 9، في كل يوم من الشهر، في كل شهر، في أيام الأسبوع من 1 إلى 5" — أي الساعة 9:00 صباحًا من الاثنين إلى الجمعة. يعمل */10 * * * * كل 10 دقائق على مدار الساعة، ويعمل 0 0 1 * * عند منتصف الليل في اليوم الأول من كل شهر.

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

ما يجب أن تعرفه

أكبر مفاجأة في دلالات cron: عندما يكون يوم الشهر ويوم الأسبوع كلاهما مقيّدين (لم يُترك أي منهما *)، فإنهما يُدمجان بعملية OR، لا AND. لذا فإن 0 0 15 * 5 لا يعني "اليوم 15، إذا كان جمعة" — بل يعني "اليوم 15 من الشهر، أو كل يوم جمعة"، وهذا يعمل أكثر بكثير مما يقصده معظم الناس. إذا كان أحدهما فقط هو المهم، اترك الآخر *.

ترقيم يوم الأسبوع يمكن أن يفاجئ أيضًا: كل من 0 و7 يعنيان الأحد في معظم تنفيذات cron، بينما يُرمَز للاثنين بـ1. والأهم من ذلك، أن cron يعمل دائمًا في المنطقة الزمنية المضبوطة على الخادم — غالبًا UTC على البنية التحتية السحابية — لا في المنطقة الزمنية المحلية لمن أعدّ الجدول، لذا فإن مهمة مجدولة لـ"الساعة 9 صباحًا" قد تعمل في ساعة محلية مختلفة عمّا هو متوقَّع إلى أن تُؤكَّد المنطقة الزمنية للمضيف. تستخدم مجدولات السحابة مثل schedule: في GitHub Actions وAWS EventBridge وKubernetes CronJob جميعها هذه الصياغة ذات الحقول الخمسة نفسها كأساس، أحيانًا بإضافات خاصة بالمزوّد (حقل ثوانٍ اختياري، اختصار بأسماء الأيام)، لذا فإن جدولًا يُبنى هنا ينتقل مباشرة إلى تلك المنصات بأقل قدر من التحويل.

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

كيف أُشغّل شيئًا كل 30 ثانية؟

أصغر وحدة في cron التقليدي هي الدقيقة. الحل الشائع هو إدخالان: واحد عادي، وآخر بإضافة `sleep 30 &&` قبل الأمر — أو استخدم مؤقتات systemd التي تدعم الثواني.

لماذا عملت مهمتي المجدولة الساعة 9:00 في وقت غريب؟

السبب دائمًا تقريبًا هو المنطقة الزمنية: يعمل crontab بالتوقيت المحلي للخادم (وغالبًا ما يكون UTC على الأجهزة السحابية). تحقق باستخدام أمر `date` على المضيف، أو اضبط CRON_TZ إن كان مدعومًا.

كيف أختبر تعبيرًا بأمان؟

وجّهه أولًا إلى أمر تسجيل: `* * * * * date >> /tmp/cron-test.log`، تأكّد من الإيقاع، ثم استبدله بالأمر الحقيقي. تأكّد أيضًا أن مستخدم crontab يملك متغيّر PATH اللازم — بيئة cron محدودة جدًا.

ماذا يحدث عندما يُضبط يوم الشهر ويوم الأسبوع كلاهما؟

يُدمجان بعملية OR لا AND — جدول مثل `0 0 15 * 5` يعمل في اليوم 15 من الشهر وأيضًا في كل يوم جمعة، وليس فقط في جمعة تصادف اليوم 15. لا يستطيع cron وحده التعبير عن تقاطع الشرطين معًا؛ يجب أن يتم هذا التحقق داخل المهمة نفسها.

هل يراعي cron التوقيت الصيفي (DST)؟

يعتمد ذلك على التنفيذ، لكن cron التقليدي يتبع عمومًا التوقيت المحلي لساعة النظام بما في ذلك انتقالات التوقيت الصيفي — ما يعني أن مهمة مجدولة خلال ساعة "التقديم" أو "التأخير" قد تعمل صفر مرة أو مرتين في ذلك اليوم. الخوادم المضبوطة على UTC تتجنّب هذا تمامًا، وهذا سبب إضافي يجعل معظم مجدولات الإنتاج تعتمد UTC افتراضيًا.

هل يمكن الجمع بين نطاق وخطوة في الحقل نفسه، مثل كل يوم عمل ثانٍ؟

نعم — يمكن تطبيق الخطوة على نطاق بدلاً من الاقتصار على العلامة النجمية فقط: تعني `1-5/2` في حقل يوم الأسبوع "كل يوم ثانٍ ضمن نطاق الاثنين إلى الجمعة"، أي الاثنين والأربعاء والجمعة. تدعم معظم تنفيذات cron الحديثة (بما فيها Vixie cron وsystemd) هذه الصيغة المدمجة من النطاق والخطوة، لكن أقدم تنفيذات POSIX قد لا تدعمها — لذا اختبرها مرة واحدة قبل الاعتماد عليها في بيئة قديمة.

التعليقات

لا توجد تعليقات بعد — كن أول من يكتب تعليقًا!

أدوات مشابهة