等待ssh-exec完成

时间:2018-08-15 07:51:29

标签: node.js wait

我正在尝试使用ssh-exec软件包从远程主机获取信息。 这是我的功能:

getHostStats(hostnames) {
    var currhost;
    var result;
    for (var i = 0; i < Object.keys(hostnames).length; i++) {
        currhost = hostnames[i];
        console.log("Current host: " + currhost);
        exec('/root/usage.sh', {
            user: 'root',
            host: currhost,
        },
            function (err, stdout) {
                if (err) { console.error(err); }
                result = stdout.split('\n');
                console.log("Hostname: " + currhost + ", Result 1: " + result[0] + ", Result 2: " + result[1]);
            }
        );

        console.log(result);
        this.setHostInfo(currhost, result);
    }

所以我的问题是,我正在运行的命令大约需要2秒钟才能完成并返回结果。 命令:

console.log(result);
this.setHostInfo(currhost, result);

不幸的是,不要等待exec(...)函数完成,因此变量result为空,它返回undefined

所以我读了一些关于awaitasync的内容,但是我不知道如何告诉我的应用程序先等待exec(...)函数完成然后记录结果。 / p>

我知道这是可能的,但是我的开发技能并没有最好的表现,我真的不知道如何实现这一目标。

其他问题:命令执行后ssh-exec是否会自动关闭连接?

1 个答案:

答案 0 :(得分:0)

这是使用异步/等待的一种方式

function executeShhCommand (host) {
  return new Promise((resolve, reject) => {
    exec('/root/usage.sh', {
      user: 'root',
      host: host,
    }, (err, stdout) => {
      if (err) { 
        return reject(err) 
      }
      
      result = stdout.split('\n');
      resolve(result)      
    })
  })
}

async function getHostStats(hostnames) {
    for (const host of hostnames) {
      const results = await executeShhCommand(host)
      console.log('Results for', host)
      console.log(results)
      
      // other custom code
    }
 }