一個替代 Supervisor 且更加友好的程式監控器

medz發表於2019-09-03

前提

我們在使用 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 專案程式設定跨域需求。

相關文章