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