我使用forever
运行我的Node.js服务器,我非常喜欢它的start
/stop
/restart
命令行命令。最近我决定需要一个能够向我发送有关所有服务器崩溃的系统。不幸的是forever
不支持这种开箱即用的功能。发送电子邮件时,直到永远或Node.js的应用程序崩溃永远显示器
所以我决定采取forever-monitor
(工具像forever
,但与编程方式)和nodemailer
。这里是我写的脚本:
var forever = require('forever-monitor');
var nodemailer = require('nodemailer');
var sendmailTransport = require('nodemailer-sendmail-transport');
var transporter = nodemailer.createTransport(sendmailTransport({
path: '/usr/sbin/sendmail'
}));
var error = '';
function sendMail(subject, text) {
var message = {
// sender info
from: '"Server name" <[email protected]>',
// Comma separated list of recipients
to: '"My name" <[email protected]>',
// Subject of the message
subject: subject,
// plaintext body
text: text
};
transporter.sendMail(message, function (err) {
if (err) {
console.log('Error during trial email with server error report');
console.log(err);
}
});
}
var child = new (forever.Monitor)('app.js', {
outFile: './logs/stdout.log',
errFile: './logs/stderr.log'
});
child.on('stderr', function (data) {
error += data;
});
// Check for errors every second
setInterval(function() {
if (error) {
sendMail('Your server crashed', error);
error = '';
}
}, 1000);
child.start();
我把这个文件叫做start.js
。它所做的是:产生新进程(app.js
,它运行我的快速Web服务器)与forever-monitor
,我听这个子进程的stderr
事件并收集所有错误到变量,然后我每秒钟检查这个变量,如果它不' t空我发送一封电子邮件并清除变量。此代码工作正常。
现在开始我的服务器,我需要执行一些像nohup node start.js &
。糟糕的是,没有简单的方法来停止或重新启动我的服务器。以前我用forever stopall
和forever restartall
这样做很方便。
我的下一个想法是尝试结合forever
和forever-monitor
所以我试图启动服务器这样forever start start.js
。服务器开始就像我想的那样。但重新启动不再有效。执行forever stopall
,然后forever start start.js
也不起作用。服务器开始抱怨端口已经很忙。我认为这是因为forever
停止start.js
过程,但app.js
过程产生的forever-monitor
仍然占据了港口。
所以我的问题是:如何运行的Node.js服务器,接收有关它的崩溃电子邮件,自动重新启动它时,它坠毁,并有像forever
命令行实用程序可能很容易start
/stop
/restart
呢?解决方案可以使用forever
,forever-monitor
或两者,或者实际上任何您认为可能适用于此类问题的库。