Многосерверный монитор / автозапуск в python - PullRequest
3 голосов
/ 21 мая 2009

У меня есть 2 серверные программы, которые должны запускаться с использованием экрана GNU. Я хотел бы защитить эти серверы от сбоев с помощью программы на 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
}

Ответы [ 2 ]

6 голосов
/ 21 мая 2009

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

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

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)
3 голосов
/ 21 мая 2009

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

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

.

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

...