一个替代 Supervisor 且更加友好的进程监控器
前提
我们在使用 Laravel 的时候不免用到列队来处理任务,而 Laravel 官方文档给出的是 Supervisor 来管理进程和监控。
但是我们在使用中有下面几个缺点:
- Supervisor 单日志
- 配置过于复杂
- 无法预配设置
pm2
pm2 这个工具我想做前端,尤其是做过 SSR 的都不陌生,我们需要使用 pm2 工具让进程常驻运行与自动重启这类功能。
但是我们知道 pm2 是 node 下工具,能否用于其他语言呢?其实是可以的,我们都说了嘛,pm2 就是一个工具,一个用 js 开发的工具而已。既然是工具,当然能用到其他地方去。
安装
laravel 下本身就有一个 package.json 文件。反正也要用到 node,如果你和我一样有强迫症,就依赖到项目中。如果没有,则可以全局安装:
依赖到项目
npm i pm2
// or
yarn add pm2
依赖到全局
npm -g i pm2
// or
yarn add --global pm2
预先配置
我们在项目中建立一个 YAML 的进程配置文件,暂且命名为 process.yml
:
apps:
- name: "laravel:queue:work" # 这里自己命名
script: artisan // 指定脚本为 artisan 脚本
watch: false // 不监听文件变化
interpreter: php // 脚本为php,如果你的 php 不在全局变量可以指定绝对路径脚本
args: "queue:work --tries=3" // artisan 命令和参数
restart_delay: 3000 // 进程中断三秒后重启
error_file: ./storage/logs/queue.error.log // 错误日志
out_file: ./storage/logs/queue.out.log // 输出日志
pid_file: ./storage/app/queue.pid // pid 文件路径
package scripts 配置
我们为了方便在项目中启动,我们配置几个命令:
"scripts": {
"queue:start": "npm run queue:remove && pm2 start process.yml",
"queue:remove": "pm2 delete process.yml"
}
启动
现在我们运行下面的命令就可以了:
npm run queue:start
// or
yarn queue:start
其实使用 pm2 最大的好处就是因为这玩意比 Supervisor 简单,?
本作品采用《CC 协议》,转载必须注明作者和本文链接
Seven 的代码太渣,欢迎关注我的新拓展包 medz/cors 解决 PHP 项目程序设置跨域需求。
有朋友问我,如何重启进程呢?
很简单,使用
php artisan queue:restart
即可,pm2 会自动重启
本帖由系统于 5年前 自动加精
插眼
mark
mark
Supervisor可以通过配置文件的方式来设置配置
没看出什么特别的优势,记得pm2跑nodejs倒是能在进程崩溃时自动重启.
正在使用pm2,本身不局限node.js脚本、php脚本, 还是别的脚本什么的
感觉对做前端的人超级友好
mark
Supervisor启用php项目多进程很方便,pm2好像不行
修改了process.yml,然后artisan queue:restart没生效
这玩意最大的好处是Windows平台可以用。Supervisor 只能在linux。