0

查询数据库以获取要对其执行命令的服务器列表。阵列已正确填充并按计划回显,但没有发生任何连接。我尝试将数组直接传递到 rexec 并通过 forEachAsync 循环。两者都不能正确处理服务器列表。我是否不正确地引用数组元素?

请注意最后的语法错误,我只是试图包括我尝试过的两种方法。

#!
var mysql      = require('mysql');
var resultset  = require('node-array');
var rexec = require('remote-exec');
var fs = require('fs');
var _ = require('lodash');
//var streamBuffers = require('stream-buffers');
var moment = require('moment');
var util = require('util');

var now = moment().format('YYYYMMDD_HHmmss');

var logStdout = process.stdout;
var errStderr = process.stderr;

console.log = function () {
  logStdout.write(util.format.apply(null, arguments) + '\n');
}
console.error = function () {
  errStderr.write(util.format.apply(null, arguments) + '\n');
}

var connection = mysql.createConnection({
  host     : 'abc',
  user     : 'user',
  password : '******',
  database : 'db'
});

var ssh_options = {
  port: 22,
  username: 'e109gh',
  privateKey: fs.readFileSync('R:/nodeJS/sshkey.priv'),
  stdout: fs.createWriteStream('./out.txt'),
  stderr: fs.createWriteStream('./err.txt')
}

var my_conn_options = _.clone(ssh_options);

var cmds = ['hostname -i'];

connection.query('SELECT name FROM server', function(err, rows) {
  rows.forEachAsync(function(element, index, array) {
        console.log(element.name);
                rexec(element.name,cmds,my_conn_options,function(err){
                    if (err) {
                    now = moment().format('YYYY-MM-DD HH:mm:ss');
                    console.error(err);
                    } else {
                        console.log("it worked for "+element.name);
                    }
                });
        });
});     
//  var buffer = new streamBuffers.WritableStreamBuffer();

connection.end(function(err) {});
//  my_conn_options.stdout = buffer;

//  
//  rexec(rows,cmds,my_conn_options,function(err){
//      if (err) {
//      now = moment().format('YYYY-MM-DD HH:mm:ss');
//      console.error(err);
//      } else {
//      console.log()   
//      }
//  });
//
//});
4

0 回答 0