大家好,我是前端西瓜哥,今天带大家入门一下 pm2。
如果你用朴实无华的 node 命令去运行 nodejs 应用,那它是不稳定的,运行一段时间就会挂掉,不适合用在生产环境。
对于生产环境稳定运行 nodejs 项目,我们通常使用的是 pm2 命令行工具。
pm2
pm2,是一款用于守护进程的管理命令行工具,它能够帮你管理你的应用,让它全年无休不挂掉。
pm2 是一个 NPM 包,我们需要这样安装;
npm install pm2 -g
启动应用
pm2 start main.js
项目会被启动,并默认后台运行。启动后 pm2 提供的应用名为被启动的文件名。
你可以用选项 --name <app_name>
来指定名字。
查看应用列表
pm2 list
# 或者 pm2 ls / pm2 status
pm2 的子命令还挺多别名的,超级多。具体你可以执行 pm2 -h 命令看看。
应用的运行状态。
需要注意的是,执行 pm2 list 命令输出的列表会 根据终端界面的宽度,来显示部分还是全部信息。
停止应用
pm2 stop <app_name | id | 'all'>
stop 可以根据应用名,关闭指定应用。
需要注意的是,多个应用可以是同名的,它们会全部被停止。这种情况下,我们需要指定 id,比如 pm2 stop 1
。
另外,pm2 stop all
会关闭所有应用进程。
restart、reload、delete 也相同。
删除应用
pm2 delete <app_name>
和 stop 不同,一旦删除,就无法恢复。
重启应用
pm2 restart <app_name>
重载应用
pm2 reload <app_name>
restart 和 reload 的区别是:
restart 会同时杀死和重启所有相关进程,在短暂时间内服务是不可用的。
reload 的话则是一个个销毁和重启进程,保证至少一个进程可用,做到 零停机部署(Zero downtime deployments)。
配置文件
配置项很多的情况下,用 pm2 命令行一个个带配置显得冗长,可读性差。
这时候我们可以改为从配置文件里读取配置。
pm2 init simple
pm2 init
可以帮你生成一个默认的 ecosystem.config.js 配置文件。末尾的 simple 可以生成一个简单版本的配置文件,简单配置文件如下:
module.exports = {
apps: [
{
name: 'app1',
script: './app.js',
},
],
};
然后执行 start 命令,就能根据这个配置启动服务了:
pm2 start ecosystem.config.js
我们看回配置文件。
apps 是一个数组,指定需要启动的应用。app 数组下的对象的一些属性说明:
-
name:应用名;
-
script:指定应用的入口文件;
-
cwd:设置当前目录;
-
arg:参数,传到程序中,就像
nodejs index.js arg1 arg2
一样; -
interpreter:启动器,默认为
node
。是的,你也可以换成/usr/bin/python
执行 python 脚本; -
env:对象,注入环境变量;
-
instances:实例数量;
-
out_file:普通日志输出文件
-
error_file:错误日志输出文件
-
max_memory_restart:内存达到指定大小后重启服务,处理内存溢出的情况;
更具体请看官方文档:
https://pm2.keymetrics.io/docs/usage/application-declaration/
结尾
pm2 是一个进程管理工具,广泛运用于在生产环境 nodejs 应用的管理。
我是前端西瓜哥,欢迎关注我,学习更多前端知识。