Supervisor: كود الخروج على طول الصفر

تم إنشاؤها على ٢٦ يونيو ٢٠١١  ·  33تعليقات  ·  مصدر: Supervisor/supervisor

أريد استخدام رمز الخروج لـ nagios ولكنه دائمًا 0.

عينة 1:
zopeplone: ~> ./bin/supervisorctl الوضع
http://127.0.0.1:9001 رفض الاتصال
zopeplone: ~> صدى $؟
0

هل يمكن تغيير خروج LSB المطابقة؟
http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html

المثال 2:
./bin/supervisorctl
الموازن RUNNING pid 23753 ، الجهوزية 0:00:50
مثيل 0 RUNNING pid 23751 ، وقت التشغيل 0:00:50
تم إخراج المثيل 1 في 26 يونيو 05:40 مساءً
الورنيش RUNNING pid 23754 ، الجهوزية 0:00:50
zeo RUNNING ، pid 23750 ، الجهوزية 0:00:50
zopeplone: ~> صدى $؟
0

supervisorctl

التعليق الأكثر فائدة

هل هناك أي فرصة لنقل هذا إلى نسخة 3.x؟ يسعدني تقديم المساعدة.

ال 33 كومينتر

راجع أيضًا العدد رقم 116.

تم استخدام FWIW supervisorctl pid للخروج برمز الإرجاع 2 عندما لم يكن البرنامج الخفي يعمل في المشرف 3.0a8 (كما تم حزمه لـ Ubuntu 12.10) ، ولكن هذا تراجع مرة أخرى لإرجاع الرمز 0 مع المشرف 3.0b1 (الأحدث في PyPI).

لقد بحثت في هذا على وجه التحديد. الأمر pid في supervisorctl لم يعيّن عن قصد رمز خروج في أي إصدار. الأوامر الأخرى لا تحدد رموز الخروج أيضًا. الشرط الوحيد الذي يسبب رمز الخروج 2 هو عندما يحدث استثناء غير معالج داخل supervisorctl .

تسبب خطأ في الأمر pid في استثناء غير معالج ، ولهذا السبب رأيت pid عودة رمز الخروج 2 عندما لم يكن البرنامج الخفي قيد التشغيل. تم إصلاح الخطأ في pid منذ ذلك الحين ، ولهذا لم يعد يتصرف بهذه الطريقة (بدلاً من ذلك يتصرف الآن مثل الأوامر الأخرى).

أوافق على أننا يجب أن نضع رموز خروج ذات مغزى للأوامر في إصدار مستقبلي.

هل هناك أي كلمة بشأن قبول طلب السحب المقدم من GotenXiao ؟ يعني الخروج دائمًا بالرقم 0 أن أتمتة ارتداد الخدمة باستخدام أدوات مثل القماش لن يكون لديها طريقة لمعرفة فشل محاولة الارتداد.

+1

أعتقد أنه يمكنك حل هذه المشكلة باستخدام مكون إضافي. شيء من هذا القبيل: https://gist.github.com/dnephin/f61646745bd004afba8b

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

https://github.com/lukeweber/supervisor/commit/04d47d019198287af4c4f09bc201b52dd1a149cf

لماذا تم وضع علامة "تحسين" على هذا؟ إنه خطأ. يجب على المشرف إرجاع رمز خروج مختلف عن 0 عند فشل العملية التي طلبها المستخدم.

على سبيل المثال ، عندما لا يكون البرنامج الخفي قيد التشغيل (لذلك عندما لا يكون المقبس موجودًا ، إذا كنت تستخدم مقبسًا) ، يستمر المشرف على ctl في إرجاع القيمة 0.

lukeweber سأحاول التصحيح الخاص بك ، شكرًا

+1 - هذا خطأ

هذه البطاقة قديمة وتتعلق بنقص خطير. هل يمكننا أن نتخطى أولويتها أو نقدم نوعًا من الحل المعقول؟

exi لقد كنت أستخدم التصحيح أني قمت بالفعل بالتبديل إلى runit على المدى الطويل / الإنتاج.

وصف هذا بأنه تحسين لا معنى له على الإطلاق.

+1 - خطأ بالتأكيد

+1

هذه القضية تجعلنا نبكي مرة واحدة على الأقل في الأسبوع. نظرًا لأن المشرف لا يعيد أي شيء سوى 0 ، يجب على الأنساب أن يحلل الخيوط "البشرية" للتحقق من الدولة.

+1 - هذه مشكلة خطيرة تجعل من الصعب جدًا دمج المشرف مع البنية الأساسية للنشر لدينا

+1 - هذا خطأ فادح. يجب ألا يُنظر إلى هذا على أنه تحسين ذو أولوية منخفضة

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

+1 ، هذا خطأ

+1 لإصلاح هذا. إنه غير صالح للإنتاج بالنسبة لي بدون التصحيح. لقد كنت أستخدم الإصدار المصحح الخاص بي لمدة عام الآن في الإنتاج. mnaberez هل تدمج هذا إذا كانت هناك اختبارات أم أن هناك بعض التعطيلات الأخرى؟ في 4 سنوات معلقة ، أشعر بالفضول قليلاً لماذا لم يتم ذلك بعد. أتذكر أنه يبدو أن إعادة الكتابة قليلاً من أجل اختبار أكواد الخروج بشكل كافٍ.

mnaberez هل تدمج هذا إذا كانت هناك اختبارات أم أن هناك بعض التعطيلات الأخرى؟

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

lukeweber لديه التزام برقعة (lukeweber @ 04d47d0) ، لكنه لم يقدم طلب سحب على ما أعتقد.

أعرف اثنين على الأقل من العلاقات العامة - لي (https://github.com/Supervisor/supervisor/pull/620) وواحد من GotenXiao (https://github.com/Supervisor/supervisor/issues/292).

يحتاج منجم إلى اختبارات لم أحصل عليها بعد. لم ألقي نظرة على التغييرات من GotenXiao أوlukeweber. أعتقد أنني أشعر بالفضول بشأن أي من الثلاثة هو الأقرب إلى ما هو مرغوب فيه وبعد ذلك سأركز على الأفضل إذا حصلت على بعض الوقت.

للوهلة الأولى ، يبدو lukeweber @ 04d47d0 شاملاً ويبدو أنه يحتوي على اختبارات ، لذلك ربما تكون نقطة انطلاق أفضل من العلاقات العامة الخاصة بي.

lukeweber : هل ترغب في تقديم

mnaberez -

  1. هل يتم استخدام رمز supervisorctl.py لأي شيء بخلاف الأوامر الفردية أو الوضع التفاعلي (حالتان) ، أم أنه يُعاد استخدامه في المكتبات (الحالة الثالثة - ليست تفاعلية ، تثير الاستثناءات ولا تخرج عند حدوث أخطاء)؟

قد يكون التنفيذ ما يلي والذي أعتقد أنه سيعمل لكليهما:

  1. تنفيذ handle_error (الرسالة = لا شيء ، فادح = خطأ)
  2. قم بلف أي ناتج يحتوي على "خطأ" أو "خطأ" في supervisorctl.py باستخدام أسلوب handle_error (message = ...).
  3. قم بلف أي "رفع" فارغ باستخدام handle_error (فادح = صحيح)
  4. أضف خيار exit_on_error في main () في supervisorctl.py المعرَّف بـ! Interactive
  5. قم بإنشاء اختبارات مكررة لجميع الاختبارات التي تتحقق من وجود استثناءات مختلفة في test_supervisorctl.py للتحقق من SystemExit عندما تكون options.exit_on_error = True

التعامل مع رمز مثال الخطأ:

    def handle_error(self, message=None, fatal=False):
        if message:
            self.ctl.output(message)

        if self.ctl.options.exit_on_error:
            raise SystemExit(2)
        elif fatal:
            raise

سيكون رائعًا إذا أراد أي شخص اختبار أحدث رمز. إنه مجرد جزء كبير سيشعر بالتحسن إذا مر عدد قليل من الأشخاص ببعض حالات العالم الحقيقي.

lukeweber ماذا عن إضافة بعض اختبارات التكامل القائمة على البرنامج النصي؟ أستطيع أن أرى أن أمرًا بسيطًا مثل sh -c 'sleep 3 && true' و sh -c 'sleep 3 && false' يمكنه القيام بهذه المهمة

أيضًا مندهش جدًا من أن مثل هذا الشيء الأساسي لا يعمل بعد. بينغ https://github.com/cockroachdb/cockroach-prod/issues/59

+1 لعلة شديدة من المشرف ctl

من عام 2011 حتى الآن 2016 لماذا لم يتم إصلاحه بعد؟

+1 في أي إصدار من المشرف سيكون هذا متاحًا؟
صادم للغاية ، استغرق هذا الأمر 5 سنوات حتى يتم إصلاحه ...

من الغريب أيضًا إصدار المشرف الذي سيتم إصلاح هذا الخطأ فيه.

شكرًا للمساهمين المشرفين على صنع مثل هذه الأداة المفيدة!

تم دمج هذا في الفرع الرئيسي الذي سيكون المشرف 4.0.

هل هناك أي فرصة لنقل هذا إلى نسخة 3.x؟ يسعدني تقديم المساعدة.

أستخدم supervisorctl status cron | grep RUNNING بدلاً من ذلك لفترة من الوقت في 3.x. تقوم بإرجاع 1 عندما تحصل على قيمة فادحة.

مرحبًا ، يقول المستندات الحالية ما يلي:

سيعود supervisorctl status all غير صفرية إذا لم يتم تشغيل أي عملية مفردة

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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات