Как выполнить удаленную команду SSH в фоновом режиме, используя PHP exec ()? - PullRequest
0 голосов
/ 13 декабря 2011

Существует ли простой способ выполнения команд SSH в фоновом режиме на удаленных машинах из PHP без использования ssh2_*?PHP-скрипт выполняется пользователем из bash (без участия Apache), так что это не проблема прав.Я пытался сделать это:

exec("ssh -f -o UnknownHostsFile=/dev/null -o StrictHostKeyChecking=no -i {$keyFile} {$user}@{$ip} {$remoteCommand} 2>&1 >/dev/null </dev/null");

Например:

exec("ssh -f -o UnknownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /home/data/id_rsa user@192.168.0.19 '/home/user/script.sh ; exit' 2>&1 >/dev/null </dev/null");

Все переменные PHP были экранированы с escapeshellarg() и $remoteCommand является сценарием bash на удаленной машинеон спит в течение нескольких минут, а затем начинает выполнять некоторые команды.

Моя проблема в том, что если я выполню эту команду SSH из bash, она немедленно возвращает управление bash.Если я выполняю его с php, используя exec(), он ждет, пока не выполнится удаленная команда.Я попытался добавить 2>&1 >/dev/null </dev/null после /home/user/script.sh, но выполнение все еще не возвращает управление сценарию PHP.

1 Ответ

1 голос
/ 13 декабря 2011

Я думаю, вам не хватает & в конце вашей команды для отправки выполнения в фоновый режим.

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