NodeJs之进程守护

2017-01-11 19:29:44来源:cnblogs.com作者:leslie·Zhao人点击

进程守护


由于nodejs的单线程的脆弱性,一旦遇到运行错误便会严重到退出node进程导致系统或应用瘫痪,所以pm2,forever出现了,帮助我们实现进程的重启,这只是他们的特性之一。

实例演示进程退出


遇到错误,进程退出。

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:80

 $  node app.jsServer running...

使用curl来请求:

 $  curl localhost:80Hello world!

请求没有问题。这时候我们在请求localhost:80/zqz

 $  curl localhost:80/zqzcurl: (56) Recv failure: Connection reset by peer

妥妥的进程报错:

C:/Users/Administrator/Desktop/pm2/app.js:5        throw 'req Error';        ^ req Error

使用pm2守护


我们使用pm2来守护app.js。
使用pm2 start app.js命令运行:

 $  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/zqz

 $  curl localhost:80/zqzcurl: (56) Recv failure: Connection reset by peer

没错照样是报错,但是看下面

 $  curl localhost:80Hello world!

没错,虽然有个请求报错了,但是当我们再次请求对的url的时候,依旧可以获取到数据。
这就是守护,一旦失败立即重启。

查看logs


上面的操作虽然重启了进程,但是我们看不到一些变化的东西终归是不放心。

所以这里我们来查看一下log。看下是不是跟我们想的一样。

pm2 logs app
0|app      | Server running...[STREAMING] Now streaming realtime logs for [app] process0|app      | req Error0|app      | Server running...

第一个是我们第一次启动的时候的输出。

第二个是我们请求错误链接的时候的输出。

第三个是pm2自动启动进程的输出。

这下是不是放心了?哈哈!


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台