目前我有一个脚本,它使用SSH2在服务器上执行c程序,但网页加载需要x秒,脚本等待。有没有办法让php通过ssh发送命令而不等待响应?谢谢我当前的代码:
<?php
$ssh = ssh2_connect('********', 22);
ssh2_auth_password($ssh, 'root', '**********');
$stream = ssh2_exec($ssh, './sr1 80 4 400 400 20');
fclose($stream);
?>
(由于明显的原因,服务器IP和密码被删除)
使用http://phpseclib.sourceforge.net/。。。
<?php
include('Net/SSH2.php');
$ssh = new Net_SSH2('********', 22);
$ssh->login('root', '**********');
$ssh->enablePTY();
$ssh->exec('nohup ./sr1 80 4 400 400 20 &');
你可以在有和没有nohup和&但我猜想它们是必要的。
您可以在线程中运行代码,以便异步运行:
<?php
class MySsh extends Thread {
public function run() {
$ssh = ssh2_connect('********', 22);
ssh2_auth_password($ssh, 'root', '**********');
$stream = ssh2_exec($ssh, './sr1 80 4 400 400 20');
fclose($stream);
}
}
$mySsh = new MySsh();
var_dump($mySsh->start());
?>
注意,要在php中使用Thread
s,需要安装pthreads库。
ssh2_connect,ssh2_auth_password是ssh登录所必需的。
ssh2_exec在给定第二个参数"的情况下执行命令/sr1'。你能提供它对片段的确切作用吗?
其次,ssh2_exec:在远程服务器上执行命令。我认为它将等待您的命令完成执行,然后返回。
你可以尝试使用ssh2_shell吗:请求一个交互式shell
您可能可以打开shell并调用您的命令来运行后台或不同的进程,然后退出shell。我认为它可以比ssh2_exec更快。
它对我有效:
$connection = ssh2_connect('host', 22);
ssh2_exec($connection, "screen -dmS 'sr-script' ./sr1 80 4 400 400 20 2>&1");