شرح تعبير cron: ماذا تعني النجوم والأرقام ومتى سيعمل جدولك فعلاً

تجد في ملف إعدادات سطراً غامضاً مثل */15 9-17 * * 1-5 ولا تدري ماذا يفعل. أو تكتب جدولاً بنفسك فتتساءل: هل سيعمل كل ساعة أم كل دقيقة؟ cron نظام جدولة المهام في أنظمة يونكس ولينكس، وتعابيره قصيرة لكنها كثيفة، والخطأ في حقل واحد يصنع فرقاً كبيراً. شارح cron في ساهل يقرأ التعبير ويشرحه بجملة واضحة، ويعرض لك مواعيد التشغيل القادمة لتتأكد قبل أن تعتمده.
الحقول الخمسة
يتكون تعبير cron القياسي من خمسة حقول تفصلها مسافات، بهذا الترتيب:
- الدقيقة: من 0 إلى 59.
- الساعة: من 0 إلى 23.
- يوم الشهر: من 1 إلى 31.
- الشهر: من 1 إلى 12، أو أسماء مثل JAN وFEB.
- يوم الأسبوع: من 0 إلى 6 حيث 0 الأحد، أو أسماء مثل MON وTUE. ويُقبل 7 أيضاً للأحد.
فالتعبير 30 8 * * * يعني الساعة 8:30 صباحاً كل يوم، لأن الدقيقة 30 والساعة 8 وبقية الحقول نجوم.
الرموز الأربعة
- النجمة *: «كل قيمة ممكنة». فنجمة في حقل الساعة تعني كل ساعة.
- الفاصلة ,: قائمة قيم. 0,30 في الدقائق تعني عند الدقيقة 0 وعند 30.
- الشرطة -: مدى. 9-17 في الساعات تعني من التاسعة إلى الخامسة مساءً.
- الشرطة المائلة /: خطوة. */15 في الدقائق تعني كل خمس عشرة دقيقة: 0 و15 و30 و45.
ويمكن الجمع بينها: */15 9-17 * * 1-5 التي بدأنا بها تعني: كل خمس عشرة دقيقة، من الساعة التاسعة حتى الخامسة وخمس وأربعين دقيقة مساءً، من الاثنين إلى الجمعة. هذا جدول مناسب لمهمة تعمل في ساعات الدوام فقط.
الاختصارات الجاهزة
تقبل الأداة اختصارات شائعة بدل الحقول الخمسة: @hourly كل ساعة، و@daily كل يوم عند منتصف الليل، و@weekly كل أحد، و@monthly أول كل شهر، و@yearly أول يناير. وهي تُترجم داخلياً إلى التعبير الكامل.
القاعدة التي تفاجئ الجميع: اليوم المزدوج
لو حددت يوم الشهر ويوم الأسبوع معاً، فبماذا يرتبطان؟ ظن أغلب الناس أن cron يشترط تحقق الاثنين، فيعمل «الجمعة 13 فقط». والحقيقة أن cron الكلاسيكي يعمل إذا تحقق أحدهما. فالتعبير 0 0 13 * 5 يعمل في اليوم الثالث عشر من كل شهر، وأيضاً في كل يوم جمعة، لا في الجمعة الثالثة عشرة فقط. هذه القاعدة موثقة ومقصودة، وهي من أكثر أسباب المهام التي تعمل في أيام لا تتوقعها. والأداة تطبق هذه القاعدة بدقة وتنبهك إليها في مواعيد التشغيل القادمة.
لا تقل «أظن أنه سيعمل يوم الاثنين». ضع التعبير في الأداة وانظر مواعيد التشغيل الفعلية.
التوقيت: لماذا UTC
تُحسب المواعيد القادمة في الأداة بالتوقيت العالمي UTC، لأن أغلب الخوادم تعمل به. وهذا مهم: مهمة مجدولة عند «0 9» ستعمل التاسعة بتوقيت الخادم، وهو غالباً ليس توقيتك. فإن كنت في الرياض (UTC+3) ستعمل مهمتك عند الثانية عشرة ظهراً بتوقيتك. تعرض الأداة توقيتك المحلي بجانب UTC لتقارن. ولا تفترض أن خادمك على التوقيت الذي تريده، بل تحقق من إعداداته.
ما لا تدعمه الأداة عمداً
بعض أنظمة الجدولة، مثل Quartz، تضيف حقل الثواني ورموزاً مثل L وW و#. وهذه ليست cron القياسي ومعانيها تختلف من نظام إلى آخر، فلا تخمّنها الأداة بل ترفضها وتخبرك. كذلك لا تدعم الأداة الاختصار @reboot لأنه لا يرتبط بوقت.
كيف تقرأ أي تعبير بسرعة
اقرأ الحقول من اليسار إلى اليمين وحوّل كل واحد إلى كلمات: «في الدقيقة كذا، من الساعة كذا، في يوم الشهر كذا، في الشهر كذا، في يوم الأسبوع كذا». النجمة تعني «أي». فإذا رأيت نجوماً كثيرة فالمهمة تعمل كثيراً. وانظر أولاً إلى الحقلين الأولين، فهما يحددان إن كانت المهمة تعمل مرة في اليوم أو عدة مرات، وهو أكثر ما يهمك عند المراجعة السريعة.
أخطاء شائعة
- كتابة * في الدقائق: * 9 * * * تعمل كل دقيقة خلال الساعة التاسعة، أي ستين مرة، وليس مرة واحدة. لتعمل مرة واحدة اكتب 0 9 * * *.
- الخلط بين الأحد 0 والاثنين 1: الأسبوع يبدأ بالأحد في cron.
- تواريخ لا وجود لها: 0 0 31 2 * أي 31 فبراير لا تعمل أبداً. تكتشف الأداة هذه التعابير وتخبرك.
- نسيان التوقيت الصيفي: على خادم يتبعه، قد تتكرر المهمة أو تُفقد في ليلة تغيير الساعة.
خطوات الاستخدام
- اكتب أو الصق تعبير cron في الخانة.
- اقرأ الشرح بالكلمات، وإن أخطأت أخبرتك الأداة أي حقل خاطئ.
- راجع مواعيد التشغيل القادمة وقارنها بما تقصده.
- انسخ التعبير أو الشرح لتضعه في ملف التوثيق.
سيناريو واقعي
مطور يريد نسخة احتياطية لقاعدة البيانات كل يوم عند الثالثة فجراً بتوقيته في الرياض. يكتب 0 3 * * * فيرى أن الموعد التالي الثالثة بتوقيت UTC، أي السادسة صباحاً عنده، وليس الثالثة. فيحسب أن الثالثة فجراً عنده تقابل منتصف الليل UTC، ويكتب 0 0 * * * أو @daily. لولا فحص الأداة لعملت النسخة في وقت ذروة استخدام الموقع.
أسئلة شائعة
ماذا تعني الحقول الخمسة؟
بالترتيب: الدقيقة، الساعة، يوم الشهر، الشهر، يوم الأسبوع.
ماذا تعني */5؟
كل خمس وحدات، فهي في حقل الدقائق تعني كل خمس دقائق.
ماذا لو حددت يوم الشهر ويوم الأسبوع معاً؟
في cron القياسي تعمل المهمة إذا تحقق أي منهما لا كلاهما.
بأي توقيت تُعرض المواعيد؟
بالتوقيت العالمي UTC مع عرض توقيتك المحلي بجانبه. تحقق من توقيت خادمك الفعلي.
هل تدعم الأداة صيغة Quartz؟
لا. الأداة تدعم cron القياسي ذا الحقول الخمسة، وتخبرك إن كتبت ما لا تفهمه بدل أن تخمّن.



