PM2的基本使用
简介
PM2 是一款非常优秀的 Node 进程管理工具,它有着丰富的特性:能够充分利用多核 CPU 且能够负载均衡、能够帮助应用在崩溃后、指定时间(cluster model)和超出最大内存限制 等情况下实现自动重启。
详细使用请看官方文档
安装
$ npm install pm2@latest -g
# 或
$ yarn global add pm2
这里我使用express框架创建两个本地服务 index.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('index.js---------page')
})
app.listen(3333,()=>{
console.log('server run http://localhost:3333');
})
main.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('main.js--------page');
})
app.listen(3030,()=>{
console.log('server run http://localhost:3030');
})
启动项目
$ pm2 start index.js
$ pm2 start main.js
地址栏访问
列出 PM2 管理的所有应用程序的状态:
$ pm2 ls
# 或
$ pm2 list
# 或
$ pm2 status
停止
# 停止所有进程
$ pm2 stop all
# 根据应用名停止
pm2 stop [AppName]
# 根据应用ID停止
pm2 stop [ID]
重启
# 重启所有进程
$ pm2 restart all
# 根据应用名重启
pm2 restart [AppName]
# 根据应用ID重启
pm2 restart [ID]
0秒停机重载
重新启动所有进程,始终保持至少一个进程在运行
$ pm2 reload index.js
删除应用程序
# 关闭并删除所有进程
pm2 delete all
# 根据进程名关闭并删除进程
pm2 delete [AppName]
# 根据进程ID关闭并删除进程
pm2 delete [ID]
实时显示日志
$ pm2 logs
要挖掘较旧的日志,请执行以下操作
$ pm2 logs --lines 200
基于终端的仪表板
这是一个直接适合您的终端的实时仪表板
$ pm2 monit
监控和诊断Web界面
基于 Web 的仪表板,带有诊断系统的跨服务器:
$ pm2 plus
更改时重新启动应用程序
$ pm2 start main.js --watch --ignore-watch="node_modules"
这将监视并重新启动应用程序,从当前目录所有子文件夹进行任何文件更改,它将忽略node_modules文件夹 --ignore-watch="node_modules" 中的任何更改,可以使用 pm2 logs 检查重新启动的应用日志。
更新pm2
$ npm install pm2@latest -g
$ pm2 update
集群模式
对于 Node.js 应用程序,PM2 包含一个自动负载均衡器,它将在每个生成的进程之间共享所有 HTTP[s]/Websocket/TCP/UDP 连接。 要在群集模式下启动应用程序:
$ pm2 start app.js -i max
PM2配置文件
生成示例配置文件,键入以下命令:
$ pm2 init simple
操作配置文件
与对应用程序进行操作相比,可以无缝地启动/停止/重新启动/删除配置文件中包含的所有应用程序:
# 启动所有应用程序
pm2 start ecosystem.config.js
# 停止一切
pm2 stop ecosystem.config.js
# 重新启动所有
pm2 restart ecosystem.config.js
# 重新加载所有
pm2 reload ecosystem.config.js
# 删除所有
pm2 delete ecosystem.config.js
根据特定流程操作
可以使用特定应用程序的名称和选项 --only <app_name> 对特定应用程序执行操作:
可以操作多个应用
pm2 start ecosystem.config.js --only "api-app,worker-app"
切换环境
可以通过 env_* 选项指定不同的环境变量集
module.exports = {
apps : [{
name : "app1",
script : "./app.js",
env_production: {
NODE_ENV: "production" // 生产环境
},
env_development: {
NODE_ENV: "development" // 开发环境
}
}]
}
在不同环境中的变量之间切换,请指定 --env [env name] 选项:
$ pm2 start process.json --env production
$ pm2 restart process.json --env development