by Devin Yang

建立於: 7年前 ( 更新: 7年前 )

前言

由於queue workers是一個長期執行的程序,所以我們會需要一個程序管理員supervisor來監控Linux系統上的process是否持續運作,例如:當queue:work運作失敗時,可以自動重啟queue:work process。很幸運的D-Laravel已內建supervisor囉,所以不需要再自行安裝到Mac OS上即可使用。

當您要使用Laravel上的queue功能及Laravle Echo及Events及Broadcasting或Notifications 時,
您應該就會用到supervisor應用。

在D-Laravel上運行supervisor打不死的小強相當簡單。
您需更新至D-Laravel v1.2.15 才有支援 ./console supervisor start 指令。

如果您使用舊版D-Laravel,您可以採用Docker官方的指令來執行,本文中會提到。
 

SUPERVISOR三步曲

一、 建立supervisor設定檔至D-Laravel中的etc/supervisor資料夾
事實上已有一個sample在裡面了,
所以我們可以,簡單的copy這個sample來進行修改。
假定dlaravel安裝在我們的家目錄,所以指令如下:
cd ~/dlaravel/etc/supervisor
cp laravel-worker.conf.sample laravel-worker.conf
vim laravel-work.conf laravl-work.conf
上方的command設定中,我使用Laravel的default queure,因此不指定--quque=。
myproject即是我們在D-Laravel的sites資料夾內要執行queue:work的專案。

二、解除封印
將我們在docker-compose.yml中,php服務段落內supervisor設定掛載的#號註解移除。
comment out supervisor

三、執行php container內的超級小強吧,哦打錯,是supervisor.
D-Laravel就是docker的環境,當然我們可用官方的指令,執行container內的命令。
在dlaravel的資料夾中執行的語法如下:
docker-compose exec php /etc/init.d/supervisor start

還記得嗎,就在上面的第二步,我們移除了註解#,這樣就讓php的container,能掛載我們host端dlaravel目錄內的etc/supervisor資料夾。
並在
第一步中,我們也產出了, laravel-work.conf 檔,所以php container內的supervisor可以依我們的 laravel-work.conf 設定來啟動。

Linux 初學者,可能會覺的這麼長的命令不好記,所以在新版的 D-Laravel 中提供簡易的 bash
讓我們可以少打幾個字,我們可透過 ./console 來啟動或停止 supervisor
./console supervisor start
或是
./console supervisor restart

四、檢測container內的程序是否執行(額外補充)。
我們可以透過 ./console top 指令檢測container內的supervisor程序是否執行。
./console top php

./console top php
 

Tags: dlaravel

Devin Yang

文章內容無法一一說明,如果您有什麼不了解處,歡迎提問哦:)

No Comment

Post your comment

需要登入才可留言!

類似的文章


dlaravel

使用docker in docker建立D-Laravel測試環境。

D-Laravel是一個極易使用並且極有彈性的Laravel開發環境,只要您是Mac的使用者,就算不懂Docker也可以透過他來建立Laravel的專案,進行開發,由於最近加入.env的功能新功能時,急者push,卻沒有完整測試,搞出了一堆新的Bug,所以,這次新增了一個新的dlaravel_test,bash的測試工具,透過doceker in docker的方式來跑測試。確保D-Laravel的每一次釋出都能是一個穩定的版本。

dlaravel

D-Laravel上的.env.example檔說明

本文說明關於D-Laravel上的.env設定 MYSQL_ROOT_PASSWORD=secret LARAVEL_INSTALLER='container' DOCKER_SERVICES='docker-compose.yml service/redis.yml'