使用 systemd 執行 Horizon

wkan發表於2018-04-26

Horizon Systemd.png

Horizon 可以輕鬆的處理 Laravel Redis 佇列,並且能夠很容易的監控任務的指標。
在官方文件中,Horizon 使用 Supervisor 來作為程式管理器。
最近幾年的 Linux 基本都開始採用 systemd 來管理程式,我們再也不用寫麻煩的 init 指令碼了。本文就教你怎麼用 systemd 來啟動 Horizon。

首先要知道一個概念 Unit(單元),systemd 中所有可以管理的資源統稱為 Unit。Unit 分為 12 種,比如 service、target、device、mount、timer……,我們要用到的就是這個 service。

我們建立的 service 檔案會放在 /etc/systemd/system/ 目錄下,現在就開始寫 service 檔案吧。

vim /etc/systemd/system/horizon.service

以下是寫好的 service 檔案,⚠️注意修改工作目錄

[Unit]
# 描述
Description=Laravel Horizon
# 表明本服務要在 mysql 和 redis 之後啟動,Laravel 依賴 mysql,Horizon 依賴 redis
After=mysqld.service redis-server.service

[Service]
# !!!這裡修改為laravel專案根目錄
WorkingDirectory=/project/laravel/root
# 這裡可以指定執行的使用者
User=www
Group=www
# 啟動命令,php 建議使用絕對路徑
ExecStart=/usr/bin/php artisan horizon
# 停止命令,使用 horizon 提供的優雅停止方法
ExecStop=/usr/bin/php artisan horizon:terminate
# 可以控制服務在什麼情況下重新啟動,這裡設定為異常退出時重新啟動
Restart=on-failure
# 重新啟動的前等待的時間
RestartSec=30s
# 指定正確退出的程式碼,一些沒有處理 TERM 訊號的程式退出程式碼會是 143 ,Horizon 的退出程式碼是 0
SuccessExitStatus=0

[Install]
# 指定在 多使用者 模式下啟動,就是一般的命令列模式啦,也包括圖形介面模式
WantedBy=multi-user.target

改好之後儲存一下 :wq
然後重新載入配置檔案:

systemctl daemon-reload

現在來啟動服務:

systemctl start horizon.service

正常啟動之後是不會有輸出的,我們可以通過 status 命令來檢視狀態:

systemctl status horizon.service

file

看到綠色的 running 了嗎,那就是正常執行了,下面可以看到啟動的程式情況,這裡是三個預設的 work 程式。

如果更新了程式碼,我們可以使用 restart 命令來重啟 Horizon 程式,使用新的程式碼執行:

systemctl restart horizon.service

使用 enable 命令可以指定服務開機啟動:

systemctl enable horizon.service

這樣下次重啟的時候 Horizon 就自己啟動啦~

如果不再需要自動啟動,那就用 disable 命令:

systemctl disable horizon.service

當然 disable 命令並不會馬上停止正在執行的服務,它只是讓服務在下次開機的時候不自動啟動,我們可以使用 stop 命令來直接停止正在執行服務:

systemctl stop horizon.service

最後還有個檢視 systemd 的日誌的命令 journalctl
我們可以這樣檢視一個服務輸出的日誌:

journalctl -u horizon.service

加上引數 -f 可以看到實時輸出的日誌。

file

Laravel YES !

相關文章