前言
随着互联网的发展,Node.js 这个前端技术正在越来越多地被应用到各种场景中。而随之而来的问题就是如何管理多进程,确保应用的高效稳定运行。PM2 就是一个非常好用的进程管理工具,它能够在生产环境中轻松管理 Node.js 应用的进程、日志等资源。本文将介绍 PM2 的使用步骤和注意事项。
安装
安装 PM2 的方式有两种:全局安装和本地安装。全局安装会将 PM2 安装到全局环境中,可以在任意目录中使用;而本地安装则只在当前项目中生效。根据自己的需求进行安装即可。
全局安装
npm install pm2 -g
本地安装
npm install pm2 --save-dev
使用
启动进程
启动一个 Node.js 进程非常简单,只需要在命令行中执行以下命令:
pm2 start app.js
其中 app.js
是你的 Node.js 应用的入口文件。PM2 会为你启动一个进程,然后在后台运行。如果需要查看这个进程的运行情况或者输出,可以执行以下命令:
pm2 logs
停止进程
停止一个进程也非常简单,只需要使用以下命令:
pm2 stop [app-name|pm2_id|all]
其中 app-name
是进程的名称,pm2_id
是进程的 ID,all
则表示停止所有进程。如果需要立即停止进程,可以使用 --kill-timeout
选项:
pm2 stop [app-name|pm2_id|all] --kill-timeout 3000
其中 --kill-timeout
选项指定了停止进程的超时时间。如果未能在超时时间内停止进程,则会强制停止。
重启进程
重启进程也很方便,只需要使用以下命令:
pm2 restart [app-name|pm2_id|all]
同样的,app-name
、pm2_id
和 all
表示重启指定的进程、进程 ID 或所有进程。如果需要强制重启,可以使用 --force
选项:
pm2 restart [app-name|pm2_id|all] --force
查看进程状态
使用 pm2 list
命令可以查看当前所有进程的状态:
$ pm2 list ┌──────────┬────┬─────────┬───────┬────────┬─────────┬────────┬─────┬───────────┬───────┬──────────┐ │ App name │ id │ version │ mode │ pid │ status │ restart │ cpu │ mem │ user │ watching │ ├──────────┼────┼─────────┼───────┼────────┼─────────┼────────┼─────┼───────────┼───────┼──────────┤ │ my-app │ 0 │ 1.0.0 │ fork │ 12345 │ online │ 0 │ 0% │ 20.1 MB │ user1 │ disabled │ │ my-app │ 1 │ 1.0.0 │ fork │ 45678 │ online │ 0 │ 0% │ 20.1 MB │ user1 │ disabled │ └──────────┴────┴─────────┴───────┴────────┴─────────┴────────┴─────┴───────────┴───────┴──────────┘
查看进程详情
使用 pm2 show
命令可以查看某一个进程的详细信息:
pm2 show [app-name|pm2_id]
查看进程日志
使用 pm2 logs
命令可以查看进程的日志,包括标准输出和标准错误:
pm2 logs [app-name|pm2_id]
监听文件变化重启进程
使用 pm2 start
命令启动进程时,可以同时指定 --watch
选项来监听文件变化,一旦文件有修改,PM2 就会自动重启进程:
pm2 start app.js --watch
输出进程的 PID
通过 PM2,可以轻松获取进程的 PID,只需要使用以下命令:
pm2 pid [app-name|pm2_id]
监控进程资源
可以使用 pm2 monit
命令查看和监控进程的 CPU 和内存使用情况:
pm2 monit [app-name|pm2_id]
总结
PM2 是一款非常实用的 Node.js 进程管理工具,可以帮助我们在生产环境中轻松地管理 Node.js 应用的进程、日志等资源,提高应用的稳定性和可用性。希望本文可以帮助初学者更好地理解和使用 PM2,特别是如何启动、停止、重启、监控进程,以及如何监听文件变化自动重启进程等注意事项。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6466d21d968c7c53b073edb7