2015-04-04 55 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,或者通過請求拉取永久項目。也許永遠感謝你會收到電子郵件通知。