1. 程式人生 > >forever讓nodejs應用後臺執行

forever讓nodejs應用後臺執行

本地 highlight 文件夾 amp 一個 exit 建議 api 不知道

nodejs一般是當成一條用戶命令執行的,當用戶斷開客戶連接,運用也就停了,很煩人。如何讓nodejs應用當成服務,在後臺執行呢?

最簡單的辦法:

$ nohup node app.js &

但是,forever能做更多的事情,比如分別記錄輸出和錯誤日誌,比如可以在js中作為api使用。

$ sudo npm install forever -g   #安裝
$ forever start app.js          #啟動
$ forever stop app.js           #關閉
$ forever start -l forever.log -o out.log -e err.log app.js   #輸出日誌和錯誤

命令語法及使用 https://github.com/nodejitsu/forever

個人覺著forever的幾個好處

1, daemon 不用自己寫 2, 自動重啟, 特別適合web項目 3, 進程管理

forever -w app.js -w 參數是自動監控文件變化,文件修改保存了自動重啟app.js。非常爽。唯一不爽的是那個 .foreverignore 不起作用,作者一直沒有修改。

本質上就是在forever進程之下,創建一個node app的子進程。

forever使用說明

// 1. 簡單的啟動
forever start app.js

// 2. 指定forever信息輸出文件,當然,默認它會放到~/.forever/forever.log
forever start -l forever.log app.js

// 3. 指定app.js中的日誌信息和錯誤日誌輸出文件,
//  -o 就是console.log輸出的信息,-e 就是console.error輸出的信息
forever start -o out.log -e err.log app.js

// 4. 追加日誌,forever默認是不能覆蓋上次的啟動日誌,
//  所以如果第二次啟動不加-a,則會不讓運行
forever start -l forever.log -a app.js

// 5. 監聽當前文件夾下的所有文件改動
forever start -w app.js

forever list

// 1. 監聽當前文件夾下的所有文件改動(不太建議這樣) forever start -w app.js

// 1. 停止所有運行的node App forever stopall // 2. 停止其中一個node App forever stop app.js // 當然還可以這樣 // forever list 找到對應的id,然後: forever stop [id]

重啟操作跟停止操作保持一致。

// 1. 啟動所有
forever restartall

開發和線上建議配置

// 開發環境下
NODE_ENV=development forever start -l forever.log -e err.log -a app.js
// 線上環境下
NODE_ENV=production forever start -l ~/.forever/forever.log -e ~/.forever/err.log -w -a app.js
上面加上NODE_ENV為了讓app.js辨認當前是什麽環境用的。不加它可能就不知道哦?

這個時候需要註意配置好環境變量。

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
我們要讓Forever自動運行,先在/etc/init.d目錄創建一個文件node,內容如下:

    stop)
        forever stop --pidFile $PID $DEAMON
        ;;
    stopall)
        forever stopall --pidFile $PID
        ;;
    restartall)
        forever restartall --pidFile $PID
        ;;
    reload|restart)
        forever restart -l $LOG/forever.log -o $LOG/forever_out.log -e $LOG/forever_err.log --pidFile $PID -a $DEAMON
        ;;
    list)
        forever list
        ;;
    *)
        echo "Usage: /etc.init.d/node {start|stop|restart|reload|stopall|restartall|list}"
        exit 1
        ;;
esac
exit 0
技術分享 技術分享


以上代碼是我在本地虛擬機的配置,根據實際情況修改相關參數,主要是DEAMON的路徑參數,賦予該文件可執行權限,並運行chkconfig添加自動運行:


reboot重啟系統,通過瀏覽器進入網站可發現,該NodeJS已經可自動運行了……

forever讓nodejs應用後臺執行