現(xiàn) 在已經(jīng)基本上解決了Node.JS因異常而崩潰的問題虑稼,不過任何平臺都不是100%可靠的把将,還有一些錯誤是從Node底層拋出的,有些異常 try/catch和uncaughtException都無法捕獲隅要。之前在運行ourjs的時侯弯菊,會偶爾碰到底層拋出的文件流讀取異常,這就是一個底層 libuv的BUG畜吊,node.js在0.10.21中進行了修復(fù)泽疆。 面對這種情況,我們就應(yīng)該為nodejs應(yīng)用添加守護進程玲献,讓NodeJS遭遇異常崩潰以后能馬上復(fù)活殉疼。 另外,還應(yīng)該把這些產(chǎn)生的異常記錄到日志中捌年,并讓異常永遠不再發(fā)生瓢娜。
使用node來守護node
node-forever 提供了守護的功能和LOG日志記錄功能。 安裝非常容易
[sudo] npm install forever
使用也很簡單
$ forever start simple-server.js$ forever list [0] simple-server.js [ 24597, 24596 ]
還可以看日志
forever -o out.log -e err.log my-script.js
使用shell啟動腳本守護node
使用node來守護的話資源開銷可能會有點大礼预,而且也會略顯復(fù)雜眠砾,OurJS直接在開機啟動腳本來進程線程守護。 如在debian中放置的 ourjs 開機啟動文件: /etc/init.d/ourjs 這個文件非常簡單托酸,只有啟動的選項褒颈,守護的核心功能是由一個無限循環(huán) while true; 來實現(xiàn)的柒巫,為了防止過于密集的錯誤阻塞進程,每次錯誤后間隔1秒重啟服務(wù)
WEB_DIR='/var/www/ourjs'
WEB_APP='svr/ourjs.js'
location of node you want to use
NODE_EXE=/root/local/bin/nodewhile true;
do {
$NODE_EXE $WEB_DIR/$WEB_APP config.magazine.js
echo "Stopped unexpected, restarting "
}
2>> $WEB_DIR/error.log
sleep 1done
錯誤日志記錄也非常簡單谷丸,直接將此進程控制臺當中的錯誤輸出到error.log文件即可: 2>> $WEB_DIR/error.log 這一行, 2 代表 Error堡掏。
注意
80 端口需要sudo 來執(zhí)行