الأتمتة الدورية المُفعَّلة شهريًا لا تعمل كما هو متوقع

مرحبًا بك!

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

كما ترون في الأسفل، من المفترض أن تقوم الأتمتة بـ “جدولة اجتماع مع نتائج مستكشف البيانات” تلقائيًا كل شهر. إذا نقرت على “تفعيل الآن”، فستعمل كما هو متوقع: سيستلم المستخدمون المضافون إلى القائمة نتائج مستكشف البيانات بالإضافة إلى ملف CSV؛ ومع ذلك، فإن التفعيل التلقائي لا يعمل.

أقدر أي ملاحظات أو اقتراحات يمكن أن تساعدني في حل هذه المشكلة. شكرًا لكم!

إعجاب واحد (1)

هل قمت بتأكيد التاريخ المحدد للجدولة وإعداد المنطقة الزمنية، وإذا كان متاحًا، هل قمت بتفعيل زر تشغيل المهام الفائتة؟

إعجاب واحد (1)

هل أجريت أي اختبارات للتأكد من استيفاء جميع المعايير بشكل طبيعي (باستثناء trigger now

أيضًا، اضبط التوقيت لحدوث يوميًا وانتقل إلى مجموعة تجريبية. إذا عملت بشكل صحيح، فانتقل بعد ذلك إلى المجموعة الفعلية بشكل شهري.

كما أعتقد أن جمهورك المستهدف يحتاج إلى مشاركة استعلام مستكشف البيانات معهم.

إعجاب واحد (1)

مرحبًا

شكرًا للمساعدة.. @kairo162 @putty

نعم.. لكن المشكلة ليست في عدم تشغيله في التاريخ/الوقت المحدد، بل في أنه لا يعمل على الإطلاق.

أين يمكنني العثور على هذا الزر من فضلك؟

من المفترض أن يرسل رسالة خاصة مباشرة إلى مستخدمين اثنين. وقد تم مشاركة الاستعلام مع المستخدمين. شكرًا على اقتراح الاختبار بتجربة أوقات مختلفة. سأحاول التجربة باستخدام مجموعة تجريبية أيضًا.

إعجابَين (2)

أبرز فرق لاحظته هو أن واجهتك لا تُظهر متى من المفترض أن تُفعّل الأتمتة مرة أخرى.

أعتقد أنني سأبدأ بإنشاء أتمتة جديدة بنفس الإعدادات والتحقق مما إذا كانت ستحصل على “تاريخ التشغيل التالي” بعد تمكينها.

إعجاب واحد (1)

أنا أستخدم هذا النص البرمجي للأتمتة بالضبط في عدة أماكن دون أي مشكلة. إليك ما يحتويه ملف الإعدادات الخاص بي في أحد هذه الأماكن - قمت بتغيير التكرار إلى 5 دقائق بدلاً من أسبوع لهذا الاختبار، لكنه يعمل أسبوعيًا كما هو متوقع عند تعيينه كذلك):

رسالة خاصة (tech-admin هي مجموعة)

جرب تشغيل الأتمتة ثم راجع سجلاتك في yoursite/logs

إعجاب واحد (1)

أرى هذا:

ربما جرب إزالة رمز مقابض التحكم من اسم السكربت وعنوان استعلام مستكشف البيانات. قد يكون هذا هو ما يتسبب في فشل الحمولة (رغم أنني أعتقد أنه يجب أن يكون ذلك مقبولاً).

إعجاب واحد (1)

مرحبًا @Moin @Lilly

شكرًا على المساعدة! أخشى أن اللغز لم يُحل بعد… وإليك السبب:

قبل «تاريخ التشغيل»، كان الشكل تمامًا كما هو مع الرسالة «سيتم تشغيل الأتمتة التالية في: [التاريخ/الوقت]»؛ ومع ذلك، بعد مرور هذا التاريخ/الوقت دون نجاح التشغيل، لم تعد الرسالة تظهر. أثناء الاختبار، غيّرت التوقيت إلى دقيقة واحدة وعادت رسالة التشغيل للظهور. في شهر سابق لم يتم فيه التشغيل، قمت بتحديث المؤقت وظهرت الرسالة التي تفيد بأنه سيتم التشغيل في الساعة الأولى من الشهر القادم (ولكنه لم يحدث).

في الواقع، عمل الأمر وتم تشغيله في بعض الأشهر بينما لم يحدث ذلك في أشهر أخرى، لذا فإن السبب غير واضح، لكن يبدو الآن أنه لم يعد يُفعّل تلقائيًا على الإطلاق. ما إصدار Discourse الذي تستخدمونه؟ نسختي هي 2026.5.0-latest…

للأسف، حتى عند التشغيل، لا يظهر أي شيء في /logs. (لقد حددت جميع الخيارات).

لا أعتقد أن هذه هي المشكلة لأنني غيّرت وقت التشغيل إلى دقيقة واحدة وتم إرسال الرسالة:

أنا أيضًا على نفس النسخة، وأقوم بالتحديث أسبوعيًا على الأقل.

إعجاب واحد (1)

حسنًا، شكرًا لك! هل تود محاولة إنشاء أتمتة اختبار تُفعّل شهريًا، من فضلك؟

أشعر أن المشكلة تكمن في المُفعّل “شهريًا”، لأنه عندما أغيّره إلى مُفعّل كل دقيقة واحدة، يعمل بشكل صحيح.

حسنًا، قمت بضبطها على شهر ثم شغّلتها وعملت. لكن انتظار شهر للاختبار ليس مفيدًا حقًا هنا. سأحاول ضبط تاريخ البدء خلال بضع دقائق.

تعديل: يبدو أن الإعداد الشهري يعمل بالنسبة لي.

إذا كان الأمر يعمل بالنسبة لك، فربما تكون المشكلة فقط لدى بعض المستخدمين؟

حسناً، لقد تحدثتُ اليوم مع موين حول هذه القضية، وقد أشارت إلى أنه ربما يكون هناك خطأ برمجي عند استخدام الخيار الشهري، لأن طول الشهر يختلف من شهر لآخر؟ بالطبع كانت محقة إلى حد ما… :stuck_out_tongue:

على أي حال، قمتُ ببعض البحث الإضافي :detective:

لم أستطع فعلياً العثور على سكريبت الأتمتة الخاص بـ schedule pm with data-explorer results في مجلد plugins/automation/lib/discourse_automation/scripts الأساسي، لذا فهو مختبئ في مكان آخر.

لكنني كنتُ أراجع المنطق هنا الخاص بالتكرار (من المفترض أن السكريبت يستخدمه) في الملف plugins/automation/lib/discourse_automation/triggers/recurring.rb:

أعتقد أن الكود الأساسي للأتمتة الشهرية المتكررة يحسب اليوم الأسبوعي رقمي (مثل اليوم الثالث) بدلاً من تاريخ التقويم الفعلي، وهناك عدم تطابق في المنطق مع Calendar day - فبإدراج BYDAY=#{count}#{byday} في قاعدة RRule، تجبر الأتمتة على محاذاة يوم الأسبوع، بينما يجب استخدام BYMONTHDAY بدلاً من BYDAY.

لذلك، إذا قمتَ بضبط الأتمتة لتبدأ في 15 أبريل (الذي يقع في اليوم الثالث من الأربعاء في أبريل)، فسيفسر النظام القاعدة على النحو التالي: تشغيل في الأربعاء الثالث من كل شهر.

وعندما يأتي شهر مايو، يكون الأربعاء الثالث هو 20 مايو، مما يتسبب في انحراف الجدول الزمني بمقدار 5 أيام.

علاوة على ذلك، إذا قمتَ بضبط الأتمتة في اليوم 30 أو 31 من شهر ما (مثل “الثلاثاء الخامس”)، فإن النظام سيبحث عن الثلاثاء الخامس في الشهر التالي. وإذا كان ذلك الشهر يحتوي فقط على 4 أيام ثلاثاء، فإن الأتمتة ستفشل تماماً في العثور على تاريخ صالح وستتخطى الشهر بأكمله بصمت.

لدي إصلاح تم اختباره وأنا أقوم بإنشاء طلب دمج (PR) إذا أراد الفريق الاطلاع عليه. يغير هذا الإصلاح المنطق من اليوم الأسبوعي رقمي إلى تاريخ التقويم الدقيق.


إليك بعض لقطات الشاشة من اختباراتي وتصحيح الأخطاء:

حالتان، واحدة بدون إصلاح والأخرى مع إصلاح المنطق الخاص بي

قم بإنشاء نفس الأتمتة تماماً في كلتا الحالتين (النسخة المحسنة على اليمين):

انتبه إلى الفروقات في اللافتات التي تقول “سيتم تشغيل الأتمتة التالية في:” مع انحراف 5 أيام - النسخة غير المصححة تنحرف إلى الأربعاء الثالث (20 مايو)، بدلاً من 15 مايو.

على سبيل المثال، قد يتم تخطي شهور كاملة إذا كان النظام يبحث عن الخميس الرابع بدلاً من تاريخ فعلي.

يمكنك أيضاً اختبار النتيجة نفسها في وحدة تحكم Rails

غير مصحح:

مع الإصلاح:

طلب الدمج هنا:

إعجاب واحد (1)

@j.jaffeux هل يمكنك إلقاء نظرة سريعة عليها :eyes؟