Как запустить процесс на удаленном сервере, отключить, а потом собрать выход? - PullRequest
1 голос
/ 29 мая 2009

Я пишу код автоматизации на python, чтобы проверить поведение сетевого приложения. Таким образом, мой код должен иметь возможность запускать процесс / сценарий (скажем, tcpdump или сценарий python) на сервере в сети, отключаться, запускать другие процессы, а затем возвращаться и завершать работу / оценивать процесс, запущенный ранее. Моя сеть представляет собой смесь компьютеров с Windows и Linux, и на всех машинах запущены sshd и python (через Cygwin для машин с Windows).

Я рассмотрел пару идей, а именно: - Запуск процесса и перемещение его на задний план через конечный амперсанд (&) - Использование экрана в некотором роде - Использование потоков Python

Что еще мне следует рассмотреть? По вашему опыту, что вы считаете лучшим способом для выполнения такой задачи?

Ответы [ 8 ]

3 голосов
/ 29 мая 2009

Итак, теперь, когда я понимаю, чего вы действительно хотите, я думаю, что лучшим решением было бы создание облегченного демона для запуска любого процесса, который вы хотите. Затем демон может вывести выходные данные в файл журнала, поэтому, если для его запуска требуется меньше времени, чем вы ожидаете, вы все равно можете получить выходные данные. Это было бы более надежно, чем возиться с экраном. Следует отметить, однако, что это потенциально может представлять угрозу безопасности. Если эту задачу вы выполняете каждые N периодов времени, cron будет работать намного лучше.

Оригинальный ответ

Экран GNU - хороший способ справиться с этим.

Редактировать: Перечитав ваш вопрос, я думаю, что неправильно вас понял. Вы хотите запустить скрипт Python на локальном компьютере, который подключится к удаленному и выполнит какой-то произвольный процесс, а затем сможет снова подключиться к удаленному компьютеру и просмотреть журнал или что-то в этом роде?

3 голосов
/ 29 мая 2009

nohup для начинающих (по крайней мере, на * nix) - и перенаправить вывод в какой-нибудь файл журнала, куда вы можете вернуться и, конечно, следить за ним.

1 голос
/ 29 мая 2009

Если вы хотите, чтобы сценарий продолжался после вашего ухода, вы можете вызвать его через "nohup" (man nohup). Вы также можете поместить код в скрипт, который вы вызываете, чтобы он демонизировался сам ... он разветвляется, превращает ребенка в демона и затем завершает работу. Поднялся быстрый поиск: http://code.activestate.com/recipes/278731/

1 голос
/ 29 мая 2009

Для быстрого и легкого решения вы не можете победить экран . Если вы хотите полностью автоматизировать процесс, имеет смысл настроить процесс на запуск в качестве демона и записать в системный журнал команду syslog. В вашей системе может быть сценарий start-stop-daemon, а для кода C может также быть вызов daemon(3) в библиотеке C.

0 голосов
/ 02 января 2014

Если вы используете python для запуска автоматизации ... Я бы попытался автоматизировать все, используя paramiko. Это универсальная библиотека ssh для python. Вместо того, чтобы возвращаться к выводу, вы можете собрать несколько строк вывода в реальном времени, а затем отключиться, когда вам больше не нужен процесс, и позволить ssh убить вас.

0 голосов
/ 29 мая 2009

Вместо экрана, поскольку он предназначен для одного процесса, я бы предложил его легкого брата, dtach .

Довольно полный рецепт демонизации процесса в Python см. В Создание демона по пути Python из поваренной книги ActiveState.

0 голосов
/ 29 мая 2009

Большинство коммерческих продуктов устанавливают «Агент» на удаленных машинах.

В мире Linux у вас есть множество таких агентов. Rexec, Rlogin и RSH все приходят на ум.

Это все клиенты, которые взаимодействуют с демонами, работающими на удаленных хостах.

Если вы не хотите использовать эти агенты, вы можете прочитать о них и заново изобрести эти колеса на чистом Python. По сути, клиент (например, rexec) связывается с сервером (rexecd) для отправки рабочих запросов.

0 голосов
/ 29 мая 2009

Как упоминает @Gandalf, вам понадобится nohup в дополнение к фонованию &, иначе процесс SIGKILLed будет завершен после завершения сеанса входа. Если вы перенаправите вывод в файл журнала, вы сможете легко просмотреть его позже (и вам не придется устанавливать экран на всех ваших компьютерах).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...