pm2 代替 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 簡單


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM