pm2如何执行脚本批量启动多个服务
在 PM2 中批量启动多个服务,可以通过以下几种高效方式实现,具体操作如下:
方法1:使用 ecosystem.config.js
配置文件(推荐)
步骤1:生成配置文件
在项目根目录运行以下命令,生成模板文件:
pm2 init simple
这会生成一个基础的 ecosystem.config.js
文件。
步骤2:配置多服务
编辑 ecosystem.config.js
,定义多个应用的启动配置:
module.exports = {apps: [{name: "api-server", // 服务1名称script: "./api/index.js",instances: 2, // 启动2个实例env: { NODE_ENV: "production" }},{name: "worker-service", // 服务2名称script: "./worker/main.js",watch: true // 文件变化自动重启},{name: "frontend", // 服务3名称script: "serve",args: "-s build -p 3000"}]
};
步骤3:批量启动所有服务
pm2 start ecosystem.config.js
-
效果:一键启动所有配置的服务。
-
管理命令:
pm2 list # 查看所有服务状态 pm2 stop all # 停止所有服务 pm2 restart all # 重启所有服务
方法2:通过 JSON 文件批量启动
步骤1:创建 apps.json
文件
[{"name": "service-1","script": "./service1.js","cwd": "/path/to/app1"},{"name": "service-2","script": "./service2.js","cwd": "/path/to/app2"}
]
步骤2:批量启动
pm2 start apps.json
方法3:命令行直接批量启动
单行命令启动多个服务
pm2 start app1.js app2.js app3.js --name="server1,server2,server3"
-
参数说明:
-
--name
:为每个服务指定名称(逗号分隔,与脚本顺序对应)。
-
批量启动同一目录下的所有Node脚本
for file in /path/to/scripts/*.js; dopm2 start "$file" --name "$(basename "$file" .js)"
done
方法4:使用 PM2 模块(动态扩展)
安装 pm2-intercom
模块
pm2 install pm2-intercom
通过脚本动态启动服务
const pm2 = require('pm2');const services = [{ script: './serviceA.js', name: 'ServiceA' },{ script: './serviceB.js', name: 'ServiceB' }
];services.forEach(service => {pm2.start(service, (err) => {if (err) console.error(`Failed to start ${service.name}:`, err);});
});
管理技巧
-
批量操作命令:
pm2 restart all # 重启所有 pm2 stop all # 停止所有 pm2 delete all # 删除所有
-
日志管理:
pm2 logs # 查看所有日志 pm2 flush # 清空日志
-
开机自启:
pm2 save # 保存当前服务列表 pm2 startup # 生成开机启动脚本
常见问题
Q1:如何确保服务按顺序启动?
在 ecosystem.config.js
中使用 autorestart: false
和依赖管理:
{name: "db-service",script: "./db.js",autorestart: false,wait_ready: true // 等待进程发送"ready"信号
}
然后通过脚本控制启动顺序。
Q2:如何批量更新代码并重启?
git pull && pm2 restart all
Q3:如何监控多个服务的资源占用?
pm2 monit
通过以上方法,可以高效地批量管理多个Node.js服务。推荐使用 ecosystem.config.js
,它提供了最灵活的配置和完整的生命周期管理。