متعدد الخادم مراقب / إعادة ضبط السيارات في بيثون

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

  •  23-08-2019
  •  | 
  •  

سؤال

لدي 2 برامج خادم يجب أن تبدأ باستخدام شاشة GNU. أود أن يتصاعد هذه الخوادم ضد تعطل مع برنامج مقره بيثون ينطلق كل جلسة شاشة ثم يراقب عملية الخادم. إذا تعطل عملية الخادم، فأنا بحاجة إلى رمز Python لقتل جلسة الشاشة الخارجية وأعد تشغيل الخادم بشاشة مرة أخرى.

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

Pseudoodocode كما يلي:

thread-one {
     While 1:
     start server 1 using screen
     wait for server to end
     end while
}

thread-two {
     While 1:
     start server 2 using screen
     wait for server to end
     end while
}
هل كانت مفيدة؟

المحلول

"يجب أن تكون متعددة الخيوط للتعامل مع إعادة تشغيل برنامجين منفصلين"

لا ترى لماذا.

import subprocess

commands = [ ["p1"], ["p2"] ]
programs = [ subprocess.Popen(c) for c in commands ]
while True:
    for i in range(len(programs)):
        if programs[i].returncode is None:
            continue # still running
        else:
            # restart this one
            programs[i]= subprocess.Popen(commands[i])
        time.sleep(1.0)

نصائح أخرى

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

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

.

مونيت هو أداة مساعدة مجانية مفتوحة المصدر لإدارة المراقبة والعمليات والملفات والأدلة والملفات على نظام UNIX. يجري مونيت الصيانة التلقائية والإصلاح ويمكنه تنفيذ الإجراءات السببية ذات مغزى في حالات الخطأ.

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