前提
我們在使用 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 簡單,?
Seven 的程式碼太渣,歡迎關注我的新擴充包 medz/cors 解決 PHP 專案程式設定跨域需求。