2015-04-04 50 views
3

我使用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 stopallforever restartall这样做很方便。

我的下一个想法是尝试结合foreverforever-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或两者,或者实际上任何您认为可能适用于此类问题的库。

回答

2

我认为你应该fork永远的git仓库和源代码中添加电子邮件通知。这样,您仍然可以使用永久CLI而无需额外的脚本。

如果你不熟悉的概念退房:https://help.github.com/articles/fork-a-repo/

好像这样的功能have been already requested,但没有太多的回复。

使用工作解决方案,您可以将您的(分叉)回购添加到您的package.json,或者通过请求拉取永久项目。也许永远感谢你会收到电子邮件通知。