إشارة مرور إلى العمليات المدارة باستخدام Supervisord

StackOverflow https://stackoverflow.com/questions/3533371

سؤال

أنا أستخدم Supervisord لتفرخ وإدارة تطبيق FastCgi الذي أكتبه في C لهدف Linux. لديّ معالج إشارة يخرج من طلبي بأمان عند استلام Sigint. لقد تحقق من أن معالج الإشارة يعمل حسب الرغبة في تشغيل التطبيق في نافذة طرفية وإصدار CTRL-C للخروج.

عند إصدار أمر "إيقاف" إلى Supervisord (عبر SupervisorCtl) ، يبدو أن Supervisord غير قادر على إجبار التطبيق على الخروج دون استدعاء Sigkill:

2010-08-20 10:02:49,661 INFO waiting for cse to die
2010-08-20 10:02:52,665 INFO waiting for cse to die
2010-08-20 10:02:55,669 INFO waiting for cse to die
2010-08-20 10:02:58,672 INFO waiting for cse to die
2010-08-20 10:02:59,673 WARN killing 'cse' (2031) with SIGKILL
2010-08-20 10:02:59,674 INFO stopped: cse (terminated by SIGKILL)

لدي ما يلي في ملف supcentisord.conf

stopsignal=INT

من افتراض أن مشكلات Supervisord "STOPSIGNAL" عند استدعاء أمر إيقاف التشغيل ، لذلك أأخذ بيانات المعلومات كدليل على أن تطبيقي لا يستجيب إلى Sigint الصادر عن Supervisord.

كيف يمكنني إجراء تصحيح الإشارة التي تمر بين Supervisord وتطبيقي؟

هل كانت مفيدة؟

المحلول 2

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

بدلاً من ذلك ، يبدو أن Supervisord يتوقف عن تسجيل عمليات STDERR لعملية الطفل بمجرد أن يتلقى طلبًا لاستدعاء StopSignal. ونتيجة لذلك ، لن تتم معالجة أي قطع تسجيل تستند إلى Stderr لإغلاق عملية الطفل بواسطة Supervisord. في حالتي ، جعل هذا يبدو أن عملية الطفل لم تتلقى sigint ، لأنه لم يكن تسجيل أي شيء إلى Stderr بعد التذرع بالإشارة.

نصائح أخرى

يمكنك تشغيل Supervisord على سطر الأوامر في وضع التصحيح والحصول على مزيد من المعلومات.

Supervisord -N -e Debug

كان هذا خطأ تم إصلاحه منذ ذلك الحين في إصدار 3.0A10 (2011-03-30) وفقًا لهذا الالتزام: https://github.com/supervisor/supervisor/commit/e19cbc185dfad045c8775750d36ab8ceed4c4dfb

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top