الوثائق

الجدولة (cron)

تشغيل pipeline على فترات منتظمة — يوميًا أو أسبوعيًا أو شهريًا أو بتعبير cron حرّ.

تُشغّل قناة الجدولة pipeline وفق تقويم محدَّد. وهي مكافئة لـcron، لكنها تُهيَّأ في محرّر النموذج ومُسجَّلة كأي exchange آخر.

لماذا هذه القناة

ليست كل الـpipelines تفاعلية (استجابةً لبريد أو مكالمة أو webhook). فكثير منها استباقي: تقرير يومي، متابعة أسبوعية، فحص لنظام خارجي كل ساعة. وذلك ما تغطيه قناة الجدولة.

التهيئة

  1. في محرّر النموذج، هيّئ عقدة Start بمستقبِل مُشغِّل مجدول.
  2. اختر:
    • التقويم — ابنِه بصريًا عبر CronBuilder (يوميًا أو أسبوعيًا أو شهريًا، في الساعة التي تختارها)، أو انتقل إلى الوضع المتقدّم لإدخال تعبير cron كلاسيكي من 5 حقول (0 8 * * 1-5 = 8 صباحًا في أيام الأسبوع). لا حاجة إلى معرفة صياغة cron.
    • المنطقة الزمنية — اسم IANA (Europe/Paris، UTC…) يُفسَّر التقويم وفقه. الافتراضي: UTC.
    • الهدف — تسمية حرّة (مثال: briefing_hebdo، alerte_impayes) تُمرَّر إلى الـpipeline لتوجيهه.
    • عند تفويت نبضة — سياسة الاستدراك (catchup)، انظر أدناه. الافتراضي: تعويض الكل.

pipeline واحد، عدّة أهداف. يمكن لعقدة Start نفسها أن تحمل عدّة مُشغِّلات مجدولة، لكلٍّ منها objectif مختلف. وتوجّه الشروط (filter) في بداية الـpipeline التنفيذ عندئذٍ وفق الهدف المستلَم — مثلًا ملخّص أسبوعي يوم الاثنين وتنبيه يومي في القالب نفسه (راجع CFO IA).

ما يستقبله الـpipeline

عند كل تشغيل، يُنشأ exchange يحتوي على:

  • schedule.objectif — تسمية الهدف المُهيَّأ (للتوجيه متعدّد المُشغِّلات)
  • schedule.cron — تعبير cron المُهيَّأ
  • schedule.occurrence — الطابع الزمني المخطَّط له (UTC)
  • schedule.fired_at — الطابع الزمني الفعلي للتشغيل (UTC)
  • schedule.catchup — true إذا كان هذا التشغيل استدراكًا

التسامح والاستدراك

يوضَع كل تشغيل في طابور متين قبل تنفيذه: إعادة التشغيل أثناء التنفيذ لا تُضيّعه.

إذا كان betool غير متاح لحظة التشغيل (صيانة، حادث)، فإنّ مصير التكرارات الفائتة يتوقّف على إعداد عند تفويت نبضة (catchup) الخاص بالمُشغِّل:

الخيارالقيمةالأثر
تعويض الكل (الافتراضي)allيُعاد تشغيل التكرارات الفائتة، ضمن نافذة مدّتها 24 ساعة وفي حدود أحدث 12 تكرارًا.
الأحدث فقطrun_onceلا يُعاد تشغيل سوى أحدث تكرار فائت.
لا شيءskipلا يُعاد تشغيل أي تكرار فائت؛ ويستأنف الـpipeline عند التشغيل المجدول التالي.

يُنفَّذ التكرار المُستدرَك مرّة واحدة فقط ويُوسَم بـschedule.catchup = true، ما يتيح للـpipeline الإشارة إلى تقرير صدر متأخّرًا. والتكرار الذي يُتخطّى عمدًا (run_once، skip) يُتخطّى نهائيًا: لا يظهر لاحقًا، حتى لو غيّرت السياسة بعد ذلك.

وبعد نافذة الـ24 ساعة، لا يُعاد تشغيل أي شيء: فالتقرير المفقود أفضل من سيل من التقارير المتأخّرة. والمُشغِّل الذي لم يُنفَّذ قطّ ليس لديه ما يستدركه.

اختر الأحدث فقط لحالة لحظية (مزامنة، تحقّق) لا يهمّ فيها سوى آخر تنفيذ، ولا شيء حين يفقد التنفيذ المتأخّر معناه (تنبيه كل ساعة، تذكير في ساعة محدّدة).

حالات استخدام نموذجية

  • تقرير يومي في الساعة 8 صباحًا — وكيل يستعلم من عدّة أنظمة، ويلخّص ويرسل موجزًا عبر البريد الإلكتروني.
  • مزامنة كل ساعة — pipeline يسحب العناصر الجديدة من نظام خارجي، ويمرّرها إلى وكيل تصنيف، ويدفع النتائج إلى CRM لديك.
  • فحص أسبوعي — وكيل يدقّق حالة بنية تحتية ويشير إلى التباينات.
  • متابعة بعد 7 أيام — على العملاء المحتملين المُقدَّمين قبل أسبوع ولا يزالون بلا ردّ.

أفضل الممارسات

  • تجنّب البدء في بداية الدقيقة تمامًا — كثير من الأنظمة تنبض عند 0 * * * *. فضّل 7 * * * * لتوزيع الحِمل.
  • سجّل المهام التي لا شيء لديها لتفعله. المهمّة التي تعمل ولا تفعل شيئًا (لعدم وجود عناصر للمعالجة) يجب أن تتتبّع ذلك صراحةً. وإلا، فلن تتمكّن من التمييز بين «كل شيء على ما يُرام» و*«المهمّة لم تعد تعمل»*.