PHP:如何发送ssh命令而不等到它执行完?

时间:2019-02-18 13:53:40

标签: php ssh

我具有以下功能:

false

sshcommand函数如下所示:

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)) }

我的问题是第一个更新功能要等到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,但结果相同。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

尝试在命令中使用&

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

bash手册页说:

  

如果命令由控制操作符&终止,则外壳程序将在子外壳程序的后台执行该命令。外壳程序不等待命令完成,返回状态为0。

确保ssh使用的用于用户的shell支持该功能。

或者,您可以尝试使用nohup

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

这也可能取决于外壳。 bash有效。还是不确定sh