我在多台服务器上运行一些命令,我希望它们可以同时运行,
foreach($clust['hosts'] as $hostStr) {
list($host, $port) = Str::rsplit($hostStr,':',2,22);
$ssh = new \Net_SSH2($host, $port);
if(!$ssh->login($username,$key)) {
throw new \Exception("Could not connect to $username@$host:$port");
}
$connections[] = $ssh;
}
foreach($connections as $i=>$ssh) {
$ssh->exec('cd /path/to/my/project && hg up', function($str) {
echo $str;
});
echo "right after ls $i\n";
}
但这总是按顺序运行。我可以告诉Net_SSH2
是非阻塞的吗?
答案 0 :(得分:1)
您可能做的一件事是使用$ssh->setTimeout(1)
或$ssh->setTimeout(0.5)
或其他东西。
你也可能$ssh->write(...)
,而不是$ssh->read()
。