如何在同一目录下使用PM2启动多个Laravel artisan后台进程?
PM2同目录多artisan进程启动方案
问题原因
PM2默认会将执行的脚本文件路径作为应用的核心识别标识,你两次启动命令调用的都是同目录下的artisan脚本,因此第二次启动时PM2会默认判定为你要更新已有的同脚本进程,导致第一个进程被覆盖。
解决方法
方法1:命令行添加强制启动参数
在原有启动命令中添加--force参数,强制PM2创建新的进程实例,不会覆盖已有同脚本进程:
# 启动队列工作进程 pm2 start artisan --interpreter php --name queue-worker --force -- queue:work --daemon # 启动调度工作进程 pm2 start artisan --interpreter php --name schedule-worker --force -- schedule:work --daemon
方法2:使用生态配置文件统一管理(更推荐)
如果需要长期管理多个同项目进程,推荐使用PM2生态配置文件,后续批量操作更便捷:
- 在项目根目录创建
ecosystem.config.js文件,内容如下:
module.exports = { apps : [ { name: "queue-worker", script: "artisan", interpreter: "php", args: "queue:work --daemon", cwd: "./", instances: 1, autorestart: true }, { name: "schedule-worker", script: "artisan", interpreter: "php", args: "schedule:work --daemon", cwd: "./", instances: 1, autorestart: true } ] };
- 执行启动命令即可一次性启动两个进程:
pm2 start ecosystem.config.js
验证方式
启动完成后执行pm2 list命令,即可看到两个命名进程同时处于运行状态。
小提示:操作前可先执行
pm2 delete all清空现有PM2进程,避免旧进程干扰测试。
内容的提问来源于stack exchange,提问作者Willy Ferry
相关产品推荐
相关产品推荐

