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

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

  •  23-08-2019
  •  | 
  •  

Вопрос

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

Решение

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

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

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)

Другие советы

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

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

.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top