ماذا يعني التعبير `*/5 * * * *`؟ شرح Cron عمليًا بأمثلة واضحة
شرح معنى */5 * * * *، ترتيب حقول Cron الخمسة، وأخطاء المناطق الزمنية واختلاف الصيغ بين أنظمة الجدولة.
لو لقيت التعبير */5 * * * * داخل ملف crontab، فهو يعني تشغيل الأمر كل خمس دقائق: عند الدقيقة 0 ثم 5 و10 و15، وهكذا، في كل ساعة وكل يوم وكل شهر. الحقل الأول يحدد الدقائق. أما */5 فهي صيغة خطوة تبدأ من نطاق الدقائق الكامل وتختار كل قيمة خامسة، والنجوم الأربعة الباقية تترك الساعة ويوم الشهر والشهر ويوم الأسبوع من غير تقييد.[1][2][6]
مثلًا، سيطابق التعبير أوقاتًا مثل 09:00 و09:05 و09:10 و09:15. وهو لا يعني الانتظار خمس دقائق بعد آخر تشغيل؛ بل يصف دقائق محددة على ساعة الحائط. خدمة cron التقليدية تفحص الإدخالات وفق جدول الدقائق، لذلك يناسب هذا التعبير مهمة تتكرر بدقة خمس دقائق.[2][6]
ترتيب حقول Cron الخمسة
في صيغة Unix/POSIX المعتادة لملفات crontab، تأتي الحقول بهذا الترتيب:[1][3]
| الحقل | الترتيب | القيم المعتادة | ما الذي يحدده؟ |
|---|---:|---|---|
| الدقيقة | 1 | 0-59 | الدقيقة داخل الساعة |
| الساعة | 2 | 0-23 | ساعة اليوم |
| يوم الشهر | 3 | 1-31 | اليوم في التقويم |
| الشهر | 4 | 1-12 | شهر السنة |
| يوم الأسبوع | 5 | 0-6 | يوم الأسبوع؛ يمثل 0 الأحد في وصف POSIX |
النجمة تعني كل القيم الصحيحة للحقل. الفاصلة تضع قائمة قيم، والشرطة تضع مدى متصلًا، والشرطة المائلة تضع خطوة. لذلك تعني 1,15 قيمتين محددتين، و9-17 كل القيم من 9 إلى 17، و*/5 اختيار كل خامس قيمة في نطاق الحقل.[1][2]
انتبه إلى الجمع بين يوم الشهر ويوم الأسبوع. في وصف POSIX لـ crontab، إذا كان الحقلان مقيّدين فقد يكفي تطابق أيٍّ منهما بدل اشتراط تطابق الاثنين معًا. بعض الخدمات والمجدولات تغيّر هذا السلوك، فراجع توثيق النظام الذي ستشغّل عليه المهمة.[1][2]
أمثلة عملية على تعبيرات Cron
* * * * *يشغّل الأمر عند كل حدّ للدقيقة.*/5 * * * *يشغّله عند الدقائق القابلة للقسمة على خمسة، طوال اليوم.0 * * * *يشغّله في بداية كل ساعة.30 6 * * *يشغّله يوميًا عند 06:30.0 9 * * 1-5يشغّله في أيام العمل عند 09:00 عندما يستخدم النظام1-5من الإثنين إلى الجمعة.0 0 1 * *يشغّله عند منتصف الليل في أول يوم من كل شهر.0 0 * * 0يشغّله عند منتصف الليل يوم الأحد عندما يمثل الصفر يوم الأحد.*/15 9-17 * * 1-5يشغّله كل 15 دقيقة أثناء ساعات العمل عندما يستخدم النظام1-5لأيام الأسبوع.[1][2]
خطأ شائع قريب من المطلوب هو 5 * * * *. هذا التعبير يشغّل الأمر مرة واحدة عند الدقيقة 5 من كل ساعة، مثل 01:05 و02:05، وليس كل خمس دقائق. الشرطة المائلة هي التي تحول قيمة دقيقة واحدة إلى خطوة متكررة.[1][2]
Cron مش صيغة واحدة في كل مكان
الصيغة ذات الحقول الخمسة السابقة هي النطاق المعتاد في Unix/POSIX وVixie-style cron. لا تنسخ أي تعبير يشبه Cron إلى خدمة أخرى من غير مراجعة. توثّق Kubernetes CronJobs صيغة من خمسة حقول وخطوات Vixie-style، وتضيف صيغًا خاصة مثل ? و@monthly. وتوثّق GitHub Actions صيغة POSIX، وتضع حدًا أدنى قدره خمس دقائق للـ scheduled workflows، وتدعم تحديد المنطقة الزمنية. كما توضح أن بعض الاختصارات غير القياسية، مثل @daily و@reboot، غير مدعومة فيها.[3][4]
Amazon EventBridge مثال مختلف: تعبيراته تحتاج إلى ستة حقول إلزامية، ويأتي العام بعد يوم الأسبوع، كما تستخدم قواعد خاصة للرموز ? وL وW و#. لذلك يحتاج تعبير من خمسة حقول إلى ترجمة قبل نسخه إلى EventBridge. وبعض المكتبات تضع الثواني في البداية، فتستخدم ستة حقول بترتيب مختلف. قبل النشر، حدّد النظام المستهدف، واقرأ جدول حقوله، وراجع ترقيم أيام الأسبوع والرموز الخاصة والحد الأدنى للفاصل وقاعدة الجمع بين حقلي اليوم.[5]
المنطقة الزمنية والتوقيت الصيفي
لا يحدد تعبير Cron وحده المنطقة الزمنية المدنية التي سيستخدمها المجدول. قد يعتمد crontab النظام على منطقة الجهاز أو على إعداد CRON_TZ، بينما قد تستخدم خدمة مستضافة UTC افتراضيًا أو تسمح بتحديد منطقة صريحة. اكتب المنطقة المقصودة في توثيق المهمة، خصوصًا عندما يكون وقت التشغيل مرتبطًا بساعات العمل المحلية.[2][3]
يمكن للتوقيت الصيفي أن يصنع وقتًا محليًا لا يحدث أصلًا أو وقتًا يتكرر مرتين. يوضح توثيق crontab(5) الخاص بـ cronie أن المهمة المجدولة داخل ساعة مفقودة لا تعمل، بينما قد تعمل المهمة مرتين عند وقت يتكرر. إذا كان التنفيذ مرة واحدة مهمًا، اجعل المهمة idempotent وصمّم مسار تعافٍ، ولا تفترض أن الساعة تتحرك بالطريقة نفسها طوال العام.[2]
فحص تعبير من خمسة حقول باستخدام QuickShed
محلل تعبيرات Cron في QuickShed أداة تعمل محليًا داخل المتصفح ومن غير اتصال بالإنترنت. نستخدم هنا الصيغة الخماسية المعتادة: minute hour day-of-month month day-of-week. تعرض الأداة تفصيل الحقول، ووصفًا بلغة واضحة، وقوالب جاهزة منها */5 * * * *، وما يصل إلى خمسة مواعيد تشغيل قادمة محسوبة من ساعة المتصفح. تصف metadata الأداة بأنها privacy: local وoffline: full ومن غير retention، ولا يحتوي المكوّن المفحوص على استدعاءات شبكة أو تخزين دائم.
توجد صيغ تشبه Cron وتستخدم ستة حقول، لكن ترتيب الحقول ومعانيها يختلفان بين المجدولات والمكتبات. لا يحدد هذا المقال convention من ستة حقول لأداة QuickShed. إذا كان النظام المستهدف يستخدم ستة حقول، راجع جدول حقوله وقواعده الخاصة قبل الاعتماد على نتيجة أي parser.
استخدم المحلل لاكتشاف خطأ في الحقل، ثم ارجع إلى توثيق النظام المستهدف. قبل النشر، اكتب اسم النظام والمنطقة الزمنية، حوّل التعبير إلى لهجته إن لزم، راجع مواعيد التشغيل القليلة التالية، واجعل الأمر آمنًا عند تكراره.