天天看點

express4.x使用forever

forever是一個簡單的指令式nodejs的守護程序,能夠啟動,停止,重新開機App應用。forever完全基于指令行操作,在forever程序之下,建立node的子程序,通過monitor監控node子程序的運作情況,一旦檔案更新,或者程序挂掉,forever會自動重新開機node伺服器,確定應用正常運作。

具體forever的用法可以參考:https://www.jianshu.com/p/669a618f3212

下面的文章介紹的是我在express4.x中使用forever遇到的坑。

1、使用forever start後沒有用

express4.x使用forever

使用上述指令可以看到成功了啟動了app.js,然後我通路127.0.0.1:3000,結果是無法通路,說明項目根本沒起來

我使用npm start項目就可以了。

然後我發現用npm start之後,會有一個提示:

express4.x使用forever

原來4.x其實是使用的node ./bin/www來啟動的,直接使用node app.js是無法啟動程式的,于是改下我的指令

express4.x使用forever

再次通路127.0.0.1:3000,OK了。

并且,由于我們使用了-w選項,可以使我們在修改代碼之後無需重新開機便可以讓代碼生效了,因為-w選項會監控代碼的變化,有變化會自動重新開機。

2、-w引起的問題

如上,我使用了-w自動檢測代碼變化,并自動重新開機。結果,出現了一個意外情況。因為我的項目做了日志記錄功能,開發環境下會自動記錄通路請求,sql日志和錯誤日志,導緻每次通路,項目中的日志檔案都會變化,導緻forever不斷重新開機不斷重新開機,最後直接停止了項目。

是以,我把項目中的日志檔案關閉了,項目啟動就沒問題了。

是以,要慎用-w選項。我的建議:線上模式不要加-w,以防不必要的重新開機。開發模式加-w,以便每次修改代碼之後,自動重新開機,就不用每次都手動重新開機了。

3、重新開機次數限制

-m選項可以配置重新開機次數限制。我的建議是上線初期是可以使用的,如果一個項目一直在重新開機,那麼肯定是有未捕獲的異常之類的造成的,并且比較頻繁,必須對此問題重視,而不是不斷重新開機項目,甯願項目停掉,通過錯誤日志找出問題之後再啟動項目,不然可能會産生無法預計的損失。

當然,也可以采用全局捕獲異常,然後通過郵件發送等形式立即通知開發人員,及時處理異常。

最重要的,當然是要保證系統的健壯性,更加合理的處理異常。可參考https://zhuanlan.zhihu.com/p/22814642?refer=leancloud-eng

繼續閱讀