我正在尝试使用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
所以我读了一些关于await
和async
的内容,但是我不知道如何告诉我的应用程序先等待exec(...)
函数完成然后记录结果。 / p>
我知道这是可能的,但是我的开发技能并没有最好的表现,我真的不知道如何实现这一目标。
其他问题:命令执行后ssh-exec是否会自动关闭连接?
答案 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
}
}