PM2 是一款非常优秀的 Node 进程管理工具,它有着丰富的特性:能够充分利用多核 CPU
且能够负载均衡、能够帮助应用在崩溃后、指定时间(cluster model)和超出最大内存限制
等情况下实现自动重启。
详细使用请看官方文档
官方文档:https://pm2.keymetrics.io/docs/
$ 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 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]
重新启动所有进程,始终保持至少一个进程在运行
$ pm2 reload index.js
# 关闭并删除所有进程
pm2 delete all
# 根据进程名关闭并删除进程
pm2 delete [AppName]
# 根据进程ID关闭并删除进程
pm2 delete [ID]
$ pm2 logs
$ pm2 logs --lines 200
这是一个直接适合您的终端的实时仪表板
$ pm2 monit
基于 Web 的仪表板,带有诊断系统的跨服务器:
$ pm2 plus
$ pm2 start main.js --watch --ignore-watch="node_modules"
这将监视并重新启动应用程序,从当前目录所有子文件夹进行任何文件更改,它将忽略node_modules文件夹 --ignore-watch=“node_modules” 中的任何更改,可以使用 pm2 logs 检查重新启动的应用日志。
$ npm install pm2@latest -g
$ pm2 update
对于 Node.js 应用程序,PM2 包含一个自动负载均衡器,它将在每个生成的进程之间共享所有 HTTP[s]/Websocket/TCP/UDP 连接。
要在群集模式下启动应用程序:
$ pm2 start app.js -i max
生成示例配置文件,键入以下命令:
$ 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
可以操作多个应用
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