Могу ли я запустить команду в фоновом режиме на сервере с помощью exec_command из paramiko? - PullRequest
0 голосов
/ 10 марта 2012

Я использую exec_command из Paramiko для запуска команды в фоновом режиме на сервере:

client.exec_command('test > /dev/null 2 > &1 &')

Но я не вижупроцесс по 'ps aux | grep test'.

Почему это может быть?

Ответы [ 2 ]

1 голос
/ 06 октября 2015

paramiko порождает нить для каждого .exec_command(), поэтому вам не нужно добавлять обычную магию оболочки &, как если бы вы были в bash. .exec_command() вернется мгновенно, и вы должны позаботиться о том, чтобы прочитать его буферы (stdin, stdout, sterr)

client.exec_command('test > /dev/null 2 > &1')
time.sleep(5)
client.exec_command('killall -9 test')
...
# the remot command will be force killed if you close the channel. (may depend on sshd implementation)

Это запустит test, перенаправляя stderr на стандартный вывод в отдельном потоке. Затем основной поток будет спать 5 секунд, и будет создан другой поток, который убивает тест, или, если вы не убьете его, вы просто закроете канал, а удаленный sshd позаботится обо всех процессах, созданных во время сеанса

1 голос
/ 19 марта 2012

Поскольку команда «test» завершается со статусом, определяемым данным выражением.

Команда выполняется в фоновом режиме, но сразу завершается.

Используйте другую команду, и вы увидите, что она работает в фоновом режиме.

Rob

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