
欢迎来到Bokey的空间🌼
加载中...
pm2 - Node进程管理机🧰
pm2是我常用嗯的Node进程管理机,它的日志管理、配置文件支持、热重载都是我非常常用的功能,这里主要介绍一下我对它的使用方法💡

pm2 - 一个常用的Node进程管理器🧰
PM2 是一个常用的 Node.js
进程管理器,用于在各种环境中运行 Node.js
应用程序,它可以帮助我们更稳定、高效地运行和管理Node应用服务(Express、Node脚本啥的...)。相比之下,我认为它确实方便了我们很多,尤其是它的配置文件支持,让我们可以在一个文件里,对我们的服务进程进行配置管理,可以说非常的方便,个人认为,如果需要使用Node
来做服务,基本上离不开它
因为什么我开始使用pm2?
原本我在node项目开发时,经常使用nodemon
来进行热部署,如果项目报错了,就修改一点内容,项目就自动重新跑起来了。直到我开发完成后,已经上到服务器了,项目报错了,直接服务就停了,那就没办法了?难道也是和开发时一样,上服务器修改一下代码,让项目重新跑起来吗?这肯定是不合理的,因此,我找了这个工具来使用,那就是PM2
(用了之后再也没用别的🤭)。
简单命令
安装和查看
shell
# 安装
npm install pm2 -g
# 查看版本
pm2 --version
# 更新
pm2 updated
基本命令
主要有进程信息的显示、关闭、停止运行,重启等命令,同时,pm2管理进程后控制台不会输出信息(因为他管理着很多的Node进程,如果都输出在控制台会很乱)因此,当我们需要查看进程的日志时,需要使用pm2的命令来查看项目的输出日志,甚至可以做到通过网页来监控进程。
shell
# --启动--
# 简单启动
pm2 start /*项目入口文件(app.js & bin/www) & pm2的配置文件*/
# 命名启动
pm2 start /*项目入口文件 & pm2的配置文件*/ --name /*项目在pm2中的名字*/
# 在文件改变的时候会重新启动
pm2 start /*项目入口文件 & pm2的配置文件*/ --name /*项目在pm2中的名字*/ --watch
# 查看PM2目前所管理的Node进程信息
pm2 list
pm2 ls
# 查看某进程具体情况
pm2 describe app
# --停止运行--
# 停止所有pm2进程(Node项目)的运行
pm2 stop all
# 指定某进程停止运行
pm2 stop /* 项目在pm2中的名称 or 项目在pm2中的id */
# --重启--
# 重启所有项目
pm2 restart all
// 指定某进程重启
pm2 restart /* 项目在pm2中的名称 or 项目在pm2中的id */
# ps:下面的使用方法和上面类似,我就简写了
# --删除进程(进程不再受pm2管理)--
pm2 delete [all | AppName | Id]
# --显示日志--
pm2 logs [all | AppName | Id]
# 通过网页来监控查看进程信息
pm2 plus
# 集群模式
pm2 start [all | AppName | Id] -i /*集群的数量,支持写max,表示pm2能支持的最大数量*/
简单配置
完成上面,就已经可以完成Node项目报错自动重启了(防宕机),pm2同时支持配置文件的方式启动,这样,就不用写又臭又长的命令了哈哈哈哈(玩笑)。
配置文件的生成可以命名创建:
shell
pm2 init
命令会自动生成ecosystem.config.js
,其实也可以自己取名字,只要是js
文件就可以
配置文件的一些配置:
JavaScript
module.exports = {
apps : [{
script: './bin/www', // 启动文件
watch: true, // 开启热部署
ignore_watch: ["node_modules", "logs","temp"], // 忽略watch的文件
error_file: "./logs/error.log", // 报错日志的输出文件夹
out_file: "./logs/out.log", // 日志的输出文件夹
log_date_format: "YYYY-MM-DD HH:mm:ss", // 日志的时间格式
env: { // 默认环境配置
NODE_ENV: 'dev', // 该环境的NODE_ENV
name: 'spaceP_dev', // 该环境下node进程的PM2名称
NODE_APP_INSTANCE: 'dev' // 指定该环境加载的config配置文件(默认加载default-0.json,若没有配置文件会在错误日志中报错)
},
env_beta: { // beta环境
NODE_ENV: 'beta',
name: 'spaceP_beta',
NODE_APP_INSTANCE: 'beta'
},
env_pro : { // pro环境
NODE_ENV: 'pro',
name: 'spaceP_pro',
NODE_APP_INSTANCE: 'pro'
},
}]
};
指定环境命令:
shell
pm2 start ecosystem.config.js --env beta // beta环境
pm2 start ecosystem.config.js --env pro // pro环境
其他事项 - 踩过的坑
记录踩过的雷,一个个真的改了很久😭
涉及文件上传保存至项目须知
若项目中设计上传文件保存在项目中的设计,若开启了watch模式(项目更改自动更新重启),可能会出现报错(报错502等问题),原因是pm2监听到项目内部文件修改,自动重启项目,导致session刷新,上传文件失败以及各种各样的问题,因此,需要在配置文件中,配置ignore_watch配置项来忽略文件上传的目标目录的watch,完成文件上传
配置环境,config配置文件须知
若使用类似config的库来管理不同版本加载的配置文件(指定了NODE_APP_INSTANCE),那么在config/下,就需要有对应环境的NODE_APP_INSTANCE,在pm2中指定了环境,pm2就会在config/下找对应的配置文件,默认找default-0.json这个配置文件,找不到的话会在错误输出文件夹中报错:
- 警告:'0‘的NODE_APP_INSTANCE值与任何实例配置文件名都不匹配,因此指定了不同的环境,就需要在环境中配置NODE_APP_INSTANCE配置项指定该环境的配置
发布于
2025-04-30
更新于
2025-10-13
类目
作者
Bokey
版权协议