§

أدخل تعبير Cron أو اختر إعدادًا مسبقًا أدناه.

إعدادات سريعة:
§

أوقات التشغيل العشرة القادمة

cron

يظهر الجدول بصيغة مقروءة هنا...

    §

    منشئ التعبير

    يصطدم المطورون في منطقة الخليج بصياغة Cron في كل طبقة من طبقات البنية التقنية: يقبل AWS EventBridge Scheduler التعبيرات لتشغيل Lambda، وتستخدم موارد Kubernetes CronJob الصيغة الخماسية ذاتها على كل مجموعة EKS وGKE، ويقرأها GitHub Actions مباشرةً من ملفات `.github/workflows/*.yml`. المشكلة أن هذه المنصات لا تتفق على التفاصيل الحدية — يُضيف EventBridge حقلًا سادسًا للسنة ويشترط استخدام `?` بدلًا من `*` في أحد حقلَي اليوم، بينما يعمل Kubernetes في منطقة UTC ما لم تُعيِّن `spec.timeZone` صراحةً، فيما يعمل GitHub Actions في UTC دون أي خيار للتغيير. تحلِّل هذه الأداة أي صيغة تلصقها، وتُظهر أوقات التشغيل العشرة القادمة في نطاق IANA الذي تختاره، وتُتيح لك بناء التعبير حقلًا بحقل قبل نشره في بيئة الإنتاج.

    ما هو تعبير Cron؟

    تعبير Cron هو سلسلة جدولة مضغوطة تخبر مجدولَ المهام بالضبط متى يُطلق المهمة. وُلد هذا التنسيق عام 1975 داخل خادم Unix V7 cron ولم يتغير تقريبًا — تظهر القواعد الخماسية ذاتها اليوم في Kubernetes CronJobs وAWS EventBridge وسير عمل GitHub Actions وGoogle Cloud Scheduler وGitLab CI وخطوط Jenkins، وفي أمر crontab المشحون مع كل توزيعة Linux. تحمل القواعد معنىً كثيفًا في بضعة عشر حرفًا، وهذا ما يجعل أداة التحليل التي تحوِّله إلى إنجليزية بسيطة فارقًا بين نشر واثق وتراجع في الثالثة فجرًا.

    كيف يعمل تعبير Cron؟

    يتألف تعبير Cron القياسي من خمسة حقول مفصولة بمسافات تُعرِّف معًا جدولًا متكررًا. تفحص المحرك الساعة الحالية في مقابل التعبير كل دقيقة وتُطلق المهمة حين تتطابق جميع الحقول الخمسة. الحقول من اليسار إلى اليمين:

    1. الدقيقة (0–59). الدقيقة التي تُشغَّل فيها المهمة داخل الساعة. 0 تعني بداية الساعة، و30 تعني منتصفها، و*/5 تعني كل خمس دقائق (00، 05، 10، ...)، و15,45 تعني الربع والثلاثة أرباع.
    2. الساعة (0–23). الساعة باليوم وفق ساعة 24. 0 منتصف الليل، 9 التاسعة صباحًا، 17 الخامسة مساءً. تعمل النطاقات (9-17 لساعات العمل) وقيم الخطوة (*/2 لكل ساعتين) بالطريقة ذاتها للدقائق.
    3. يوم الشهر (1–31). اليوم التقويمي للتشغيل. 1 أول الشهر، و* كل يوم، و1,15 الأول والخامس عشر. انتبه لـ 31 — يتجاوز الأشهر التي لا تمتلك 31 يومًا بصمت.
    4. الشهر (1–12 أو JAN–DEC). الأشهر التي تُشغَّل فيها المهمة. * كل شهر، 1,7 يناير ويوليو، 1-3 الربع الأول فقط. أسماء الأشهر الثلاثية غير حساسة لحالة الأحرف في معظم التطبيقات.
    5. يوم الأسبوع (0–7، حيث يعني كلٌّ من 0 و7 الأحد). يقيِّد التشغيل بأيام معينة من الأسبوع. 1-5 من الاثنين إلى الجمعة، 0,6 عطلة نهاية الأسبوع، وتعمل MON-FRI في معظم المحللين. حين يُضبَط يوم الشهر ويوم الأسبوع معًا على قيم محددة، يُطلق Cron الكلاسيكي المهمة عند أي من الحالتين (OR منطقي) مما يُفاجئ المطورين في كل مرة.

    لماذا تستخدم محلِّل تعبيرات Cron؟

    • اكتشف القراءة الخاطئة الصامتة قبل النشر. التعبير `0 2 */3 * *` يُطلَق الساعة 2 صباحًا كل ثلاثة أيام، لا كل ثلاث دقائق — الصِقه هنا لترى ذلك بالإنجليزية قبل وصوله إلى بيئة الإنتاج.
    • تعمل معظم مجدولات السحاب في UTC افتراضيًا. معاينة أوقات التشغيل العشرة القادمة في منطقتك الزمنية تكشف انزياح ساعة التوقيت الصيفي قبل أن يُنبِّه أحدهم بها في الثالثة صباحًا.
    • الاختصارات مثل `@daily` و`@weekly` و`@monthly` مريحة لكنها مبهمة. يُظهر لك المحلِّل الصيغة الخماسية الكامنة حتى تعرف بالضبط ما تمّ جدولته.
    • يتيح لك منشئ الحقل بالحقل تأليف الجدول عمودًا واحدًا في كل مرة ومشاهدة التوصيف البشري يتحدث حيًّا، وهو أسرع بكثير من إعادة قراءة صفحة دليل Cron للمرة العاشرة.

    أين تُستخدم تعبيرات Cron؟

    تظهر صياغة Cron في أي مكان تحتاج فيه مهمة إلى التكرار وفق ساعة. ثلاثة من أكثر الأسطح شيوعًا مع التحذير الخاص بكل منها:

    • جداول النسخ الاحتياطي. المدخل الكلاسيكي في `crontab -e` الذي يفرِّغ قاعدة البيانات إلى S3 في الثانية صباحًا يوميًا، أو يُدير أرشيف `pg_dump` في أول كل شهر. السطر `0 2 * * * /usr/local/bin/backup.sh` شُحن على خوادم Linux أكثر من أي سطر آخر في تاريخ Cron. احصل على الدقيقة والساعة صحيحتين، وأعِد توجيه stderr إلى مكان متين، وستكون قد استبدلت قائمة مراجعة يدوية بسكريبت أوتوماتيكي.
    • مشغِّلات `schedule` في GitHub Actions. يقبل المفتاح `on.schedule.cron` في ملفات `.github/workflows/*.yml` صيغة Cron الخماسية القياسية، غير أن المهمة تعمل دائمًا في UTC وقد يتخطى GitHub وقت التشغيل إذا كانت قائمة انتظار عامل التشغيل مشغولة. النمط الشائع: `cron: '0 9 * * 1-5'` لإرسال ملخص من الاثنين إلى الجمعة الساعة 9 صباحًا UTC. راجعه هنا بمنطقتك الزمنية المحلية أولًا حتى لا تعِد بملخص الساعة 9 صباحًا بتوقيت لندن فيصل في الواقع عند العاشرة في توقيت BST.
    • AWS EventBridge Scheduler. تأخذ تعبيرات Cron في EventBridge حقلًا سادسًا للسنة وتشترط استخدام `?` بدلًا من `*` في حقل يوم الشهر أو يوم الأسبوع — `cron(0 9 ? * MON-FRI *)` هو ترجمة EventBridge للـ Cron الكلاسيكي أيام الأسبوع الساعة 9 صباحًا. يُستخدم لاستدعاءات Lambda المجدولة وتشغيل مهام ECS وتشغيل آلات حالة Step Functions؛ والتباين مع صياغة Cron الكلاسيكية هو المصدر الأول لأخطاء `ValidationException` في عمليات نشر CloudFormation.

    كيف يبدو مثال حقيقي على تعبير Cron؟

    خذ 0 9 * * 1-5 — يُطلَق الساعة 9:00 صباحًا كل يوم عمل. قراءة الحقول من اليسار إلى اليمين: 0 هي الدقيقة الصفرية من الساعة، 9 هي الساعة التاسعة صباحًا بساعة 24، * في يوم الشهر تعني كل يوم تقويمي، * في الشهر تعني كل شهر، و1-5 في يوم الأسبوع تقصر التشغيل على الاثنين إلى الجمعة (حيث 1 = الاثنين في ترقيم Cron القياسي). الصِق ذلك في حقل الإدخال أعلاه وسيؤكد المحلِّل الساعة 09:00 صباحًا، من الاثنين إلى الجمعة مع عرض أوقات التشغيل العشرة القادمة في نطاق IANA الذي تختاره. نفس المقصد بصياغة AWS EventBridge هو cron(0 9 ? * MON-FRI *) — لاحظ حقل السنة في النهاية و? حيث يستخدم Cron القياسي *. ونفس المقصد كتعبير Quartz (ستة حقول بثوانٍ بادئة) هو 0 0 9 ? * MON-FRI. ثلاث منصات مختلفة، ثلاث صيغ مختلفة، جدول واحد.

    تعبيرات Cron صارمة في جانب واحد بالضبط: الخطأ المطبعي يمنحك جدولًا صحيح الصياغة يُطلَق في الوقت الخطأ دون أي خطأ يمكن اكتشافه في مراجعة الكود. أن تقرأ `0 0 1 * *` وتعرف أنه يُشغَّل منتصف الليل في الأول من كل شهر لا في الأول من يناير يتطلب تدريبًا. المحلِّل أعلاه يحوِّل هذا التدريب إلى فحص سريع في عشر ثوانٍ — الصِق التعبير، اقرأ الإنجليزية، تصفح أوقات التشغيل العشرة القادمة في منطقتك الزمنية، وانشر YAML واثقًا أن سطر Cron يفعل ما تقول عنه رسالة الإيداع.

    ما الفرق بين Cron ذي الخمسة حقول وذي الستة حقول؟

    Cron الخماسي هو قواعد Unix الكلاسيكية بدقة دقيقة واحدة. يُضيف Cron السداسي عمود ثوانٍ بادئًا لجدولة دون الدقيقة — يستخدمه Quartz و`@Scheduled` في Spring. يستخدم AWS EventBridge أيضًا ستة حقول لكن حقله الإضافي هو سنة تالية، لا ثوانٍ.

    ماذا تعني @hourly و@daily و@weekly؟

    ألقاب Vixie-cron مُقدَّمة عام 1987. @hourly = 0 * * * *، @daily = 0 0 * * *، @weekly = 0 0 * * 0، @monthly = 0 0 1 * *، @yearly = 0 0 1 1 *. @reboot يُطلَق مرة واحدة عند الإقلاع. ترفض GitHub Actions وEventBridge هذه الألقاب.

    هل الأحد هو اليوم 0 أم اليوم 7 في Cron؟

    كلاهما في Vixie cron الكلاسيكي — يُقبَل كل من 0 و7 حتى تُقرأ النطاقات مثل 5-7 بشكل طبيعي بمعنى الجمعة حتى الأحد. الاثنين دائمًا 1، والسبت دائمًا 6. يستخدم Quartz وAWS EventBridge اصطلاحًا مختلفًا: 1-7 مع الأحد 1. تحقق من وثائق المنصة قبل افتراض أي شيء.

    كيف يتعامل Cron مع التوقيت الصيفي؟

    يعتمد على المنطقة الزمنية للمحرك. في UTC (الافتراضي في EventBridge وKubernetes وGitHub Actions) لا يوجد توقيت صيفي. في منطقة ذات توقيت صيفي محلي، يتخطى Vixie cron الكلاسيكي المهام خلال فجوة الربيع ويُشغِّلها مرتين خلال الخريف؛ بينما تُطلِق مؤقتات systemd المهمة مرة واحدة بالضبط.