بعض أهم الأعمال في قاعدة بيانات Odoo يحدث حين لا ينظر أحد. الفواتير المتكررة تُنشأ ليلاً، وأسعار العملات تُجلب تلقائياً، والرسائل المتراكمة خلال اليوم تُرسل على دفعات. تذكيرات المتابعة تخرج، والاشتراكات تتجدد، وقواعد إعادة الطلب في المخزون تُنشئ أوامر الشراء. كل ذلك يمر عبر الإجراءات المجدولة، أي نظام cron المدمج في Odoo.
حين يتوقف إجراء مجدول عن العمل لا ينهار شيء. المستخدمون يواصلون عملهم، والواجهة تبدو طبيعية، وأول إشارة إلى المشكلة غالباً عميل يسأل لماذا لم تصله فاتورته، أو فريق مالي يلاحظ أن أسعار الصرف لم تتغير منذ أسبوعين. في هذا المقال نشرح كيف تعمل الإجراءات المجدولة، وأشهر أسباب توقفها، وما الذي تفحصه قبل أن يتحول الأمر إلى مشكلة في أعمالك.
كيف تعمل الإجراءات المجدولة فعلاً
كل إجراء مجدول هو سجل له فاصل زمني، وتاريخ «التنفيذ التالي»، والكود أو الدالة التي يستدعيها. عدد محدود من عمّال cron المخصصين يستيقظ دورياً، فيبحث عن المهام التي حلّ موعد تنفيذها، ويحجز إحداها، وينفذها، ثم يحرّك موعد تنفيذها التالي إلى الأمام.
هناك تفصيلان مهمان من زاوية الاستضافة:
- عدد عمّال cron محدود. القيمة الافتراضية لإعداد max_cron_threads في Odoo هي 2، وكل عامل ينفذ مهمة واحدة في كل مرة. لذلك فإن مهمة واحدة بطيئة تشغل نصف السعة الافتراضية طوال مدة تشغيلها.
- مهام cron تخضع لحدود زمنية. في البيئات متعددة العمّال، تُقطع المهمة التي تتجاوز الحد الزمني المضبوط. وإذا كانت تنجز كل عملها في معاملة واحدة، يُلغى كل ما أنجزته، وتبدأ من الصفر في التشغيل التالي.
لماذا تتوقف مهام cron
عملياً، تعود معظم حالات التوقف إلى قائمة قصيرة من الأسباب:
- مهمة تجاوزت حدها الزمني. مهمة تسوية أو تقرير كانت تستغرق 30 ثانية في الشهر الأول قد تستغرق عدة دقائق بعد أن تتراكم في القاعدة بيانات سنوات. فإذا تجاوزت الحد صارت تُقطع في كل مرة، ولا تكتمل أبداً، وتعود من جديد.
- مهمة ثقيلة تحجب البقية. مع عاملين فقط، يكفي استيراد طويل أو مزامنة ممتدة لتأخير طابور البريد وكل ما يأتي بعده. لا شيء يفشل، لكن كل شيء يتأخر.
- خدمة خارجية توقفت عن الرد. المهام التي تتصل بربط بنكي، أو مزوّد أسعار عملات، أو شركة شحن، أو بوابة فوترة إلكترونية حكومية، تعتمد على تلك الخدمة. بيانات دخول منتهية أو واجهة API تغيّرت تعني خطأً في كل تشغيل، والمهمة تفشل بصمت في الخلفية.
- إخفاقات متكررة توقف المهمة نهائياً. الإصدارات الحديثة من Odoo تتتبع الإخفاقات المتتالية، وقد تعطّل الإجراء المجدول الذي يستمر في الفشل. هذا يحمي الخادم، لكنه يحوّل الفشل الصاخب إلى صمت تام، فالمهمة ببساطة لم تعد مفعّلة.
- مهام أُوقفت عمداً ولم تُفعّل مجدداً. كثيراً ما تُوقف الإجراءات المجدولة أثناء ترحيل بيانات أو استيراد أو اختبار على نسخة تجريبية، ثم ينسى أحدهم إعادة تفعيلها، ولا يلاحظ أحد ذلك لأسابيع.
- تخصيصات تضيف مهامها الخاصة. الوحدات المخصصة تضيف غالباً إجراءات مجدولة خاصة بها. فإذا كانت تعالج كل السجلات في كل تشغيل بدلاً من العمل على دفعات، تزداد بطئاً مع نمو البيانات حتى تصطدم بالحد الزمني.
ما الذي تفحصه، وكم مرة
لا تحتاج إلى أدوات خاصة لاكتشاف معظم هذه المشكلات مبكراً، بل تحتاج إلى روتين ثابت:
- راجع قائمة الإجراءات المجدولة شهرياً. من الإعدادات، وبعد تفعيل وضع المطوّر، افتح القائمة التقنية ثم الإجراءات المجدولة، ورتّبها حسب تاريخ التنفيذ التالي. أي مهمة مفعّلة تأخر موعدها التالي بأكثر من فاصل زمني واحد لا تواكب عملها.
- اعرف المهام التي تهم أعمالك. حدّد القليل منها الذي يترتب على توقفه أثر حقيقي: طابور البريد، والفوترة المتكررة، وأسعار العملات، وإرسال الفواتير الإلكترونية، وأي تكامل مخصص. هذه تستحق متابعة أدق من غيرها.
- اقرأ سجلات الخادم بحثاً عن أخطاء cron. المهمة الفاشلة تترك أثر الخطأ في السجل مع كل تشغيل. وإذا كانت استضافتك مُدارة، فاسأل مزوّدك كيف تصل إلى هذه السجلات وإلى أي مدى زمني تمتد.
- ابحث عن مهام معطّلة كنت تتوقعها مفعّلة. صفِّ القائمة لعرض السجلات المؤرشفة أو غير المفعّلة، وتأكد أن لكل منها سبباً يستطيع أحد أن يشرحه.
- راقب مدة المهام بعد أي نمو كبير في البيانات. إقفال نهاية السنة، أو استيراد ضخم، أو فرع جديد يبدأ العمل، كلها قد تدفع مهمة إلى تجاوز حدها بين ليلة وضحاها.
النسخ التجريبية تحتاج عناية إضافية
بيئة الاختبار أو النسخة التجريبية المستنسخة من بيئة الإنتاج تستنسخ معها إجراءاتها المجدولة أيضاً. فإذا عملت هذه المهام على نسخة من بيانات حقيقية، قد ترسل بيئة الاختبار تذكيرات إلى عملاء حقيقيين، أو تقدّم مستندات إلى بوابة فوترة إلكترونية فعلية، أو تسحب بيانات من ربط بنكي حقيقي. لذلك، قبل أن تسمح بتشغيل الإجراءات المجدولة على أي نسخة من الإنتاج، تحقق من المهام المفعّلة ومن الاتصالات الخارجية التي تستطيع النسخة الوصول إليها فعلاً.
والنسخة التجريبية نفسها هي المكان الصحيح لاختبار الحل. فإذا كانت مهمة تتجاوز حدها الزمني، أعد إنتاج المشكلة على نسخة حديثة، وعدّل حجم الدفعة أو المنطق، وتأكد أنها تكتمل قبل أن يصل التعديل إلى بيئة الإنتاج.
أين تقع المسؤولية
تقع الإجراءات المجدولة على الحد الفاصل بين الاستضافة والتطبيق. جانب الاستضافة يحدد عدد عمّال cron وحدودهم الزمنية وإمكانية اطلاعك على السجلات، وجانب التطبيق يحدد ما تفعله كل مهمة ومدى كفاءتها. وحين تتوقف مهمة، تحتاج عادةً إلى الطرفين معاً.
لهذا من المفيد أن تحسم مسبقاً من يراجع الإجراءات المجدولة ومن يُستدعى حين يفشل أحدها. خدمة الدعم المُدار واتفاقيات مستوى الخدمة لدينا تغطي هذا النوع من الملكية المشتركة بين التطبيق والبنية التحتية. وإذا كنت تريد استضافة تكون فيها بيئات الاختبار والمراقبة والنسخ الاحتياطي التلقائي والاستعادة إلى نقطة زمنية جزءاً من الإعداد الأساسي، فإن Plemo تقدم استضافة Odoo مُدارة مبنية لهذا الغرض.
الخلاصة
الإجراءات المجدولة تفشل بصمت، وتظهر كلفتها بعد أيام في فواتير لم تُرسل وبيانات قديمة. احتفظ بقائمة قصيرة بالمهام المهمة، وراجع مواعيد تنفيذها التالية بانتظام، واقرأ السجلات حين يبدو شيء متأخراً، وتعامل مع كل نسخة تجريبية على أنها مكان قد تنطلق فيه مهام حقيقية. فحص شهري مدته 15 دقيقة يكشف معظم هذه المشكلات قبل أن يكتشفها عملاؤك.
