Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主机关机后如何在脚本中使用wakeonlan?_Javascript_Node.js - Fatal编程技术网

Javascript 主机关机后如何在脚本中使用wakeonlan?

Javascript 主机关机后如何在脚本中使用wakeonlan?,javascript,node.js,Javascript,Node.js,我想制作一个脚本,某种UPS监控。脚本必须ping网络上的主机,当ping消失时,脚本必须登录到esxi并在UPS仍有电源时将其关闭。主机ping重新出现后,通过wakeonlan自动启用esxi。我的问题是无法正确插入wakeonlan,它要么在关闭esxi之前供电,要么根本不供电。请告诉我怎么做才对 const {NodeSSH} = require('node-ssh') const wol = require('wakeonlan') var ping = require('ping')

我想制作一个脚本,某种UPS监控。脚本必须ping网络上的主机,当ping消失时,脚本必须登录到esxi并在UPS仍有电源时将其关闭。主机ping重新出现后,通过wakeonlan自动启用esxi。我的问题是无法正确插入wakeonlan,它要么在关闭esxi之前供电,要么根本不供电。请告诉我怎么做才对

const {NodeSSH} = require('node-ssh')
const wol = require('wakeonlan')
var ping = require('ping');
var nodemailer = require('nodemailer');
const mongo = require('mongodb');
const MongoClient = mongo.MongoClient;
const url = 'mongodb://127.0.0.1:27017/test';
const config = ['192.168.1.7']
const Agenda = require('agenda');

const dbURL = 'mongodb://127.0.0.1:27017/test';

const agenda = new Agenda({
    db: {
        address: dbURL,
        collection: 'jobs',
        options: {
            useNewUrlParser: true,
            useUnifiedTopology: true
        }
    }
});
//Define counters for ping statuses
let counter = 0;
let counter_f = 0; //for failed pings
agenda.define('Ping host 192.168.1.74', async job => {
    //await console.log('Ping test  #',counter++);

for(let host of config){
    let res = await ping.promise.probe(host);

    await console.log('Ping test  #',counter++);
    console.log(res.host, res.alive);
    //let PingStatus = '';
    //PingStatus = res.alive;
    if (res.alive === false){

        await console.log('Waiting for power on #',counter_5++);
    }
    //Write ping-results into database
    MongoClient.connect(url, function(err, db) {
        if (err) throw err;
        var dbo = db.db("test");
        var myobj = [
            { Host: res.host, Pingres: res.alive}
        ];
        dbo.collection("ping_results").insertMany(myobj, function(err, res) {
            if (err) throw err;
            console.log("Number of documents inserted: " + res.insertedCount);
            db.close();
        });
    });
    //Connect to esxi and shutdown it when ping-fail=12 times
    if (counter_f === 12){
        async function main() {
            
            const ssh = new NodeSSH()
            ssh.connect({
                host: 'esxi5.com',
                username: 'root',
                //privateKey: fs.readFileSync ('/vmware/vcsa_ssh', 'utf8')
                privateKey: '/vmware/vcsa_ssh'
            })
                .then(function() {
                    ssh.execCommand('poweroff', { cd:'/' }).then(function(result) {
                        console.log('STDOUT: ' + result.stdout)
                        console.log('STDERR: ' + result.stderr)
                    })
                });
        }
        main().catch(console.error);
        //Start host when pings will appear again
        if (res.alive === true){
            wol('F8:32:E4:9A:EB:A2').then(() => {
                console.log('wol sent!')
            });
         }
       }
     }
  });