You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// app.jsrequire('http').createServer((req,res)=>{}).listen(8080,()=>console.log('listening on port 8080'))// 服务启动 5s 后发出未捕获的错误,结束运行setTimeout(()=>{thrownewError('error')},5000)
pm2
pm2 是一个守护进程管理器,用法简单。
# npm install -g pm2
pm2 start app.js
运行后 pm2 会在后台启动 app.js。
当 app.js 运行结束时,pm2 会自动重启 app.js。
查看 pm2 后台运行的进程:
pm2 ls
# or
pm2 list
将在控制台打印:
┌────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ app │ default │ N/A │ fork │ 7788 │ 0s │ 1 │ online │ 0% │ 42.4mb │ username │ disabled │
└────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
根据 uncaughtException - 正确处理未捕获的错误 一节,当未捕获的错误发生时,正确的做法是:记录日志,清理资源如运行时产生的文件,主动退出进程。如需重启,则通过外部监视器来重启进程。
本文介绍最流行的外部监视器pm2,负责重启进程。
以一个简单的 http 服务应用为例
pm2
pm2 是一个守护进程管理器,用法简单。
# npm install -g pm2 pm2 start app.js
运行后 pm2 会在后台启动 app.js。
当 app.js 运行结束时,pm2 会自动重启 app.js。
查看 pm2 后台运行的进程:
pm2 ls # or pm2 list
将在控制台打印:
为了结束这个循环,可以直接运行
pm2 kill
,结束所有 pm2 进程及守护进程,也可以用pm2 stop all
停止所有 pm2 启动的进程,还可以单独停止进程pm2 stop 0 # or pm2 stop app
pm2 启动的进程运行中输出的日志,可以通过 pm2 logs 查看实时日志
pm2 还提供
pm2 monit
命令启动CLI仪表盘,方便查看实时日志。pm2 的日志是写入文件的,要看历史日志可以直接查看日志文件,日志文件路径在查看实时日志时会打印出来。
处理进程退出
pm2 kill
、pm2 stop
、pm2 reload
pm2 结束进程的流程:首先向进程发送 SIGINT 信号,开发者可以监听进程上的 SIGINT 事件来主动退出进程。
如果一定时间(默认1.6秒,可配置)后进程没有主动结束,pm2 将向进程发送 SIGKILL 信号,强制结束进程。
参考资料
The text was updated successfully, but these errors were encountered: