前提
我們在使用 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 簡單