PM2 学习笔记
安装 pm2
全局安装代码
1 | npm i -g pm2 |
我的服务器中 nodejs 安装目录为 /software/nodejs
安装过程中的代码:
1 | [root@VM_0_8_centos ~]# npm i -g pm2 |
请特别留意第一行提示代码
1 /software/nodejs/bin/pm2 -> /software/nodejs/lib/node_modules/pm2/bin/pm2
/software/nodejs/bin/pm2
表示 pm2 的快捷图标位置、/software/nodejs/lib/node_modules/pm2/bin/pm2
表示 pm2 的实际文件位置
默认 windows 系统下安装之后自动将 pm2 添加到全局环境路径中,但是在 Centos 中需要额外手工创建全局软连接。
CentOS7 中创建 pm2 软连接
1 | ln -s /software/nodejs/bin/pm2 /usr/local/bin/pm2 |
或
1 | ln -s /software/nodejs/lib/node_modules/pm2/bin/pm2 /usr/local/bin/pm2 |
你需要将
/software/nodejs
修改成你服务器上对应 nodejs 的安装目录
pm2 命令参数
更新版本
命令 | 说明 |
---|---|
pm2 update | 将 pm2 升级到最新版本 |
启动项目
命令 | 说明 |
---|---|
pm2 start app.js | 启动运行 app.js ,默认使用 fork 形式,且只启动 1 个线程 (例如启动 nodejs 项目 pm2 start /mykoa/mymood/app.js) |
启动参数
参数 | 说明 |
---|---|
–name xxx | 设置进程名字为 xxx |
–watch | 对文件进行监控,若发现修改则立即重启服务 |
–watch –ignore-watch=”node_modules” | 对文件进行监控,但是忽略 node_modules 目录中文件的改变 |
–max-memory-restart 200MB | 若程序内存占用超过 200MB 则重启该程序 (系统每隔 30 秒检查一次,因此若中间达到 200MB 时可能需要等一段时间后才会重启) |
–log xxxx | 存放日志的路径 |
–error xxxx | 存放错误日志的路径 |
– arg1 arg2 arg3 | 添加其他参数 |
–restart-delay 2000 | 延迟重启的毫秒数,效果等同于–exp-backoff-restart-delay=2000 |
–exp-backoff-restart-delay=100 | 延迟重启的毫秒数 (确保不会马上立即重启,给系统一些缓冲时间) |
–time | 写日志时加上日期 |
–cron |
强制重启时指定 cron (cron 是一种时间表达语法规则,例如 0 0 23 * * ? 表示每天 23 点 执行一次) |
–kill-timeout 3000 | 超时延长至 3000 毫秒 |
–wait-ready | 等待要启动的程序向系统进程发送 ready 信号 (例如 nodejs 创建 http 服务完成后,执行 process.send(‘ready’)) |
–listen-timeout 3000 | 设置 wait-ready 监听超时时间为 3000 毫秒 |
–shutdown-with-message | 是否允许 pm2 向系统进程发送关闭信号 (Nodejs 可以通过 process.on(‘message’,function (msg) { if(msg===’shutdown’) }) 来做出响应处理 |
–no-autorestart | 不自动重启服务 |
–no-vizion | 不使用视图模式 |
–no-daemon | 附加到应用程序日志 (daemon 为守护进程) |
查看 pm2 是否启动
命令 | 说明 |
---|---|
pm2 ping | 若系统回复:{ msg: ‘pong’ } 则表示已启动 |
其他
命令 | 说明 |
---|---|
pm2 reset |
重新设置 (暂时不明白具体用法) |
pm2 updatePM2 | 更新 (暂时不明白具体用法,难道下次重启 pm2 时更新 pm2 版本?) |
pm2 sendSignal SIGUSR2 my-app | 发送一个系统信号到某进程 (暂时不明白具体用法) |
启用多线程
命令 | 说明 |
---|---|
pm2 start app.js -i 0 | 以本机最大 CPU 核数为基准数,同时启动多个线程 (例如本机为 4 核 CPU,则启动 4 个线程) |
pm2 scale app +3 | 新增 3 个 app 服务的 线程 (前提是系统还有足够空闲 CPU 核数) |
pm2 scale app 2 | 控制 app 服务的 线程数 只能为 2 个 (在现有线程数的基础上增加或减少,最终只保证有 2 个线程) |
管理进程
命令 | 说明 |
---|---|
pm2 restart app_name | 重启 app_name (注意:app_name 是进程名,而不是进程对应的文件 app.js) |
pm2 reload app_name | 重新加载 app_name |
pm2 stop app_name | 暂停 app_name |
pm2 delect app_name | 删除 app_name |
app_name 改为 all | 则表示 对所有进程的操作 |
app_name 改为 0 | 则表示 对 pm2 list 中 id 为 0 的进程的操作 |
查看进程状态
命令 | 说明 |
---|---|
pm2 list、pm2 ls、pm2 status | 用表格形式列出当前所有 pm2 启动运行的进程 (仅列出简要信息) |
pm2 jlist | 用 JSON 形式列出当前所有 pm2 启动运行的进程详情 (JSON 字符串粘连在一起,基本无法阅读) |
pm2 prettylist | 用美化、格式化后的 JSON 形式列出当前所有 pm2 启动运行的进程详情 (JSON 字符可读性强) |
查看进程信息
命令 | 说明 |
---|---|
pm2 describe 0 | 显示某个 id 进程的所有信息 (默认 pm2 启动的第一个程序 id 为 0,id 数字值往后依次递增) |
pm2 monit | 以表格形式,显示多个进程的所有信息 显示出来的 4 个表格,分别为: 进程列表(左上)、进程日志(右上)、运行指标(左下)、元数据(右下) 界面操作方式:左右键切换表格、上下键滚动表格、ctrl + c 退出界面 |
查看日志
命令 | 说明 |
---|---|
pm2 logs | 显示全部日志 |
pm2 logs xxx | 仅仅显示 进程名为 xxx 的日志 (例如 pm2 logs myapp) |
pm2 logs –format | 格式化显示日志 |
pm2 logs –lines 200 | 只显示最近 200 行日志 |
pm2 reloadLogs | 重新加载,显示全部日志 |
pm2 flush | 清空全部日志 |
以配置文件方式启动
第 1 步:生成配置文件
执行命令:
1 | pm2 ecosystem |
上述代码执行后,会显示以下文字:
1 | File /usr/local/bin/ecosystem.config.js generated |
第 2 步:编修修改配置文件
用代码编辑工具,编辑 /usr/local/bin/ecosystem.config.js
该文件,添加或修改配置文件中的属性值。
1 | module.exports = { |
上述配置文件中 apps 为一个数组,里面可以存放多条配置信息
deploy(配置)选项,用来配置 git 相关的属性值
第 3 步:启动项目 并使用该配置文件
1 | pm2 [start|restart|stop|delete] ecosystem.config.js |
配置开发或测试环境变量
配置文件设置环境变量
只能在配置文件中才可以设置 开发(development) 或 测试(production) 环境变量。
例如,在 ecosystem.config.js 中设置:
1 | module.exports = { |
添加以哪种环境启动
以配置文件形式启动 pm2,同时添加 –env xxx 来明确以哪种环境启动:
1 | pm2 start ecosystem.config.js --env production |
Nodejs 获取环境变量
例如获取环境变量中 POST 的值:
1 | process.env.PORT |
PM2 与 Nodejs 通信
PM2 监听 Nodejs 创建 http 服务成功
pm2 启动时参数代码:
1 | pm2 start app.js --wait-ready |
当然也可以设置 监听 wait-ready 超时时间:
1 | pm2 start app.js --wait-ready --listen-timeout 3000 |
Nodejs 创建 http 服务完成后,通过 process 向系统发送 ready 信号:
1 | var http = require('http'); |
Nodejs 监听 PM2 发送关闭信号
pm2 启动时添加参数,允许 pm2 向系统进程发送关闭信号:
1 | pm2 start app.js --shutdown-with-message |
Nodejs 监听 系统进度 中的信号:
1 | process.on('message', function(msg) { |
开机自动启动 pm2 服务
第 1 步:保存当前状态
1 | pm2 save |
执行后会得到以下信息:
1 | [PM2] Saving current process list... |
第 2 步:创建启动文件
1 | pm2 startup |
执行后会得到以下信息:
1 | [PM2] Init System found: systemd |
停止开启自动重启
1 | pm2 unstartup |
执行后会得到以下信息:
1 | [root@VM_0_8_centos ~]# pm2 unstartup |
使用 pm.io
第 1 步:注册 pm.io 账户
访问 https://pm2.io/ , 创建一个账户
注册时选择”personal use (个人版)”,不要选择 ”professional use (专业版)“
第 2 步:创建 Bucket(统计表)
个人版可免费创建 4 个项目的统计表。
例如本次演示,创建一个名为 mymood 的统计表。
第 3 步:获取对应地址
每个 bucket(统计表) 对应专属的 link
1 | pm2 link xvey2h2d24wghi2 wp1gdptcfrtqpfp |
第 4 步:在服务器中启动 pm.io
在服务器中执行:
1 | pm2 plus |
若首次使用,则需要登录 pm2.io 账户验证,验证成功后则会列出该账户下的统计表项目。
1 | [root@VM_0_8_centos bin]# pm2 plus |
第 5 步:连接 xxx 统计表
在第 4 步验证成功后,输入需要连接的统计表名字:mymood,即可连接该统计表。
此时在 https://app.pm2.io/ 项目后台,即可实时看到 服务器上的数据统计分析表。
断开 pm2.io 服务
若要断开 pm2.io 统计分析服务,则执行:
1 | pm2 logout |