Многосерверный монитор/автоматический перезапуск в python

У меня есть 2 серверные программы, которые нужно запускать с помощью GNU Screen. Я хотел бы защитить эти серверы от сбоев с помощью программы на основе Python, которая запускает каждый сеанс экрана, а затем отслеживает серверный процесс. Если происходит сбой серверного процесса, мне нужен код Python, чтобы убить посторонний сеанс экрана и снова перезапустить сервер с помощью экрана.

Я очень новичок в python, но я использую эту возможность, чтобы научить себя. Я знаю, что это можно сделать в сценариях bash. Но я хочу использовать этот код для будущих функций, поэтому он должен быть просто Python.

Псевдокод выглядит следующим образом:

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
}

person Caedis    schedule 21.05.2009    source источник
comment
Это точно треды? Или это дочерние процессы?   -  person S.Lott    schedule 21.05.2009
comment
скрипт python (я думаю) должен быть многопоточным, чтобы обрабатывать перезапуск двух отдельных программ независимо. Таким образом, это потоки, которые независимо запускают дочерние процессы.   -  person Caedis    schedule 21.05.2009


Ответы (2)


«должен быть многопоточным для обработки перезапуска двух отдельных программ»

Не понимаю, почему.

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)
person S.Lott    schedule 21.05.2009
comment
Вау, я потрачу следующий час, анализируя этот код для каждой капли информации, которую я могу почерпнуть из него. Благодарю вас! - person Caedis; 21.05.2009

Вы действительно не должны запускать производственное программное обеспечение на экране. Если сервер перезагрузится, как Вы его запустите? Вручную? Также я думаю, что Вы пытаетесь заново изобрести велосипед. Уже есть довольно хорошие инструменты, которые делают то, что Вам нужно.

launchtool позволяет запускать предоставленную пользователем команду, контролируя ее выполнение разными способами, например, контролируя ее среду. , блокировка сигналов, регистрация выходных данных, изменение разрешений пользователей и групп, ограничение использования ресурсов, перезапуск в случае сбоя, непрерывный запуск, превращение в демона и многое другое.

.

Monit — бесплатная утилита с открытым исходным кодом для управления и мониторинга процессов, файлов, каталогов и файловых систем в системе UNIX. . Monit выполняет автоматическое техническое обслуживание и ремонт и может выполнять значимые причинно-следственные действия в аварийных ситуациях.

person Paweł Polewicz    schedule 21.05.2009
comment
Хотя сервер используется моими клиентами, он не критичен, это тестовый сервер для некоммерческого использования. Серверные программы, несмотря на то, что их важно поддерживать, никого не убьют и никому не будут стоить денег, если они умрут. Основная цель этого упражнения — создать полезную программу, которую я смогу расширить в будущем, изучая Python. Я обнаружил, что лучше всего учусь, когда у меня есть потребность удовлетворить. Для этого могут быть приложения, но это противоречит цели. - person Caedis; 21.05.2009