عند إيقاف عملية فرعية للمشرف ، تتجاوز عملية الإيقاف وقت Stopwaitsecs وتستخدم "options.kill" لإيقاف العملية الفرعية.
2014-11-20 16:42: 45،352 نجاح المعلومات: استئناف العملية 'hbase - dptst-example - zoneerver' مع pid 46651
2014-12-09 02: 56: 47،389 تحذير قتل "hbase - مثال dptst - خادم المناطق" (46651) باستخدام SIGKILL
2014-12-09 02: 56: 47،422 CRIT مشكلة غير معروفة تقتل hbase - مثال dptst - خادم المناطق (46651): التتبع (آخر مكالمة أخيرة):
ملف "/home/work/app/supervisor/supervisor/process.py" ، السطر 390 ، في القتل
options.kill (pid ، سيج)
ملف "/home/work/app/supervisor/supervisor/options.py" ، السطر 1219 ، في القتل
os.kill (معرف المنتج ، إشارة)
خطأ نظام التشغيل: [Errno 3] لا توجد مثل هذه العملية
ومع ذلك ، هذا الاستثناء تحطم المشرف ، هل يمكننا تجاهل وتخطي هذا الاستثناء بدلاً من تحطيم المشرف؟
أي فكرة للمشاركة؟ شكرا
: +1:
ذات صلة: # 445
يحدث هذا الانهيار بسبب عدم وجود () Subprocess.finish () أي منطق للتعامل مع ProcessStates.UNKNOWN ، والذي يتم طرحه فقط في مواقف قليلة (على سبيل المثال ، استدعاء "supervisorctl stop" لإنهاء عملية الرفرفة ، فقط لكي يصبح PID غير صالح قبل لحظات من تشغيل options.kill ، الذي يقصف باستثناء الذي يتم اكتشافه ويغير الحالة إلى UNKNOWN) ، وبالتالي ينتهي به الأمر إلى تحطيم البرنامج الخفي هنا . يمكنك محاكاة حالة السباق بإسقاط "استثناء الارتفاع ()" بعد options.kill (pid ، سيج).
اخترنا إصلاح هذا لخوادم التطبيقات الخاصة بنا عن طريق تغيير الحالة إلى FATAL (حتى لا يتم منعنا من إصلاح العملية) ، وإضافة فحص self.pid للعقل لفرع else النهائي في finish ().
لقد رأينا هذه المشكلة أيضًا ، وأود الحصول على نظرة ثاقبة حول السبب الجذري ، وهو أن المشرف يعتقد أن العملية قد تم إنهاؤها بالفعل عند النقطة التي يرسل فيها supervisorctl stop
إشارة القتل ، مما يؤدي إلى OSError: [Errno 3] No such process
استثناء ps
). نوع من قضية الأذونات ربما؟
التعليق الأكثر فائدة
يحدث هذا الانهيار بسبب عدم وجود () Subprocess.finish () أي منطق للتعامل مع ProcessStates.UNKNOWN ، والذي يتم طرحه فقط في مواقف قليلة (على سبيل المثال ، استدعاء "supervisorctl stop" لإنهاء عملية الرفرفة ، فقط لكي يصبح PID غير صالح قبل لحظات من تشغيل options.kill ، الذي يقصف باستثناء الذي يتم اكتشافه ويغير الحالة إلى UNKNOWN) ، وبالتالي ينتهي به الأمر إلى تحطيم البرنامج الخفي هنا . يمكنك محاكاة حالة السباق بإسقاط "استثناء الارتفاع ()" بعد options.kill (pid ، سيج).
اخترنا إصلاح هذا لخوادم التطبيقات الخاصة بنا عن طريق تغيير الحالة إلى FATAL (حتى لا يتم منعنا من إصلاح العملية) ، وإضافة فحص self.pid للعقل لفرع else النهائي في finish ().