因爲nodejs的單線程的脆弱性,一旦遇到運行錯誤便會嚴重到退出node進程致使系統或應用癱瘓,因此pm2,forever出現了,幫助咱們實現進程的重啓,這只是他們的特性之一。node
遇到錯誤,進程退出。git
var http = require('http'); var server = http.createServer((req, res) => { if(req.url === '/zqz'){ throw 'req Error'; } res.end('Hello world!'); }).listen('80', 'localhost', () => { console.log('Server running...'); });
咱們請求localhost:80github
$ node app.js Server running...
使用curl來請求:bash
$ curl localhost:80 Hello world!
請求沒有問題。這時候咱們在請求localhost:80/zqzapp
$ curl localhost:80/zqz curl: (56) Recv failure: Connection reset by peer
妥妥的進程報錯:curl
C:\Users\Administrator\Desktop\pm2\app.js:5 throw 'req Error'; ^ req Error
咱們使用pm2來守護app.js。
使用pm2 start app.js命令運行:ui
$ pm2 start app.js [PM2] Starting C:\Users\Administrator\Desktop\pm2\app.js in fork_mode (1 instance) [PM2] Done. ┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬──────────┐ │ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ watching │ ├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼──────────┤ │ app │ 0 │ fork │ 3968 │ online │ 0 │ 0s │ 6% │ 15.4 MB │ disabled │ └──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴──────────┘ Use `pm2 show <id|name>` to get more details about an app
再次請求localhost:80/zqzurl
$ curl localhost:80/zqz curl: (56) Recv failure: Connection reset by peer
沒錯照樣是報錯,可是看下面。線程
$ curl localhost:80 Hello world!
沒錯,雖然有個請求報錯了,可是當咱們再次請求對的url的時候,依舊能夠獲取到數據。
這就是守護,一旦失敗當即重啓。rest
上面的操做雖然重啓了進程,可是咱們看不到一些變化的東西終歸是不放心。
因此這裏咱們來查看一下log。看下是否是跟咱們想的同樣。
pm2 logs app
0|app | Server running... [STREAMING] Now streaming realtime logs for [app] process 0|app | req Error 0|app | Server running...
第一個是咱們第一次啓動的時候的輸出。
第二個是咱們請求錯誤連接的時候的輸出。
第三個是pm2自動啓動進程的輸出。
這下是否是放心了?哈哈!