PHP: Как отправить команду ssh и не ждать, пока она будет выполнена? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть следующая функция:

public function update($id){
   $data = $this->client_model->get_client_by_id($id);
   $sshport = $data['ssh_port'];
   $sshcommand = '/var/script/config.sh';
   $this->sshcommand($sshport, $sshcommand);
   $this->session->set_flashdata('msg', 'Config has been sent');
   redirect(base_url('admin/edit/'.$id)) }

Функция sshcommand выглядит следующим образом:

private function sshcommand($port, $command) {
 $remotecommand = 'ssh -q root@localhost -o "StrictHostKeyChecking=no" -p'.$port.' "'.$command.'" 2> /dev/null';
 $connection = ssh2_connect('controller.server.example.org', 22);
 ssh2_auth_pubkey_file($connection, 'root','/root/.ssh/id_rsa.pub','/root/.ssh/id_rsa');
 ssh2_exec($connection, $remotecommand); }

Моя проблема заключается в том, что первая функция обновления ожидает до /var/script/config.sh завершения.

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

Я пытался изменить ее на /var/script/config.sh | at now + 1 minute, но этотот же результат ..

Есть идеи?

1 Ответ

0 голосов
/ 18 февраля 2019

Попробуйте использовать & с вашей командой:

$sshcommand = '/var/script/config.sh &';

bash Страница man говорит:

Если команда завершается оператором управления &, оболочкавыполняет команду в фоновом режиме в подоболочке.Оболочка не ожидает завершения команды, и ее состояние возврата равно 0.

Убедитесь, что оболочка, которую вы используете для user , которая используется ssh, поддерживает это.

В качестве альтернативы вы можете попробовать с помощью nohup:

$sshcommand = 'nohup /var/script/config.sh';

Это также может зависеть от оболочки.bash работает.Не уверен насчет простой sh, хотя.

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