当前栏目
pm2:在生产环境中运行 nodejs 应用
大家好,我是前端西瓜哥,今天带大家入门一下 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 应用的管理。
我是前端西瓜哥,欢迎关注我,学习更多前端知识。
相关文章
- Jmeter系列(8)- 参数化:JSON提取器、全局参数化、CSV文件导入
- JavaScript快速入门
- 初识jQuery
- 关于JavaScript0.1+0.2=?浮点数精度问题
- NanoDet:这是个小于4M超轻量目标检测模型
- JavaScript回调函数的高手指南
- 前端开发:4、JavaScript简介、变量与常量、数据类型及内置方法、运算符、流程控制、循环结构、内置方法
- Python基础之模块:3、os模块 sys模块 json模块 json实战
- filebeat收集日志到elsticsearch中并使用ingest node的pipeline处理
- 技巧收藏|10个JavaScript常用数组操作方法
- 即使不会node.js,拖拽就可完成数据的可视化展示
- 如何使用Node.js连接数据库
- 解决aspnetcore-browser-refresh.js:234 WebSocket connection to 'wss://localhost:62356/Admin/' failed问题
- APIJSON-实现一对一,一对多复杂查询
- APIJSON - 功能符、数组关键词、对象关键词、全局关键词简表速查
- 用Three.js构建三维世界的房子
- 手把手教你发布兼容TS的JS库到npmjs上
- POSTGRESQL 15 日志的JSON 格式 为什么用JSON 与 PG 14 没有注意的一些参数
- Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
- JS常见加密 AES、DES、RSA、MD5、SHAI、HMAC、Base64(编码) - Python/JS实现