博客 / 詳情

返回

如何使用 Supervisor 管理你的進程

在我們的開發生活中,常常需要讓某些應用或服務持續運行。這時候,就需要一個能夠幫助我們管理這些進程的工具。

Supervisor 是一個廣泛使用的進程管理工具,它可以讓你輕鬆管理和控制多個進程。

在本文中,我們將一起學習如何在 Linux 系統中安裝和使用 Supervisor,確保你的應用或服務能夠無憂無慮地運行。

什麼是 Supervisor?

Supervisor 是一個客户端/服務器系統,它允許其用户監視和控制類 Unix 操作系統上的一組進程。它是用 Python 編寫的,因此在很多 Linux 發行版中都非常容易安裝。

Supervisor 的常用命令

在深入瞭解如何在特定的環境下安裝和配置 Supervisor 之前,讓我們先熟悉幾個最常用的 Supervisor 命令:

命令 説明
supervisorctl reload 重啓 Supervisor(用於新增配置或修改後,重新加載配置)
supervisorctl status <程序名> 查看某個程序狀態,不加程序名查看所有任務狀態
supervisorctl shutdown 關閉所有由 Supervisor 管理的進程
supervisorctl start <程序名> 啓動指定程序
supervisorctl stop <程序名> 停止指定程序

在阿里雲 CentOS 7.6 上 安裝 Supervisor

安裝 Supervisor

yum install -y supervisor

查看和修改配置文件

安裝完成後,讓我們來查看 Supervisor 的主配置文件 supervisord.conf

cat /etc/supervisord.conf

重點關注文件中的 include 部分,這告訴 Supervisor 從哪裏讀取額外的配置文件:

[include]
files = supervisord.d/*.ini

添加自定義進程配置信息

創建一個新的配置文件,用來定義我們的應用進程:

; vim /etc/supervisord.d/larablog.ini

[program:larablog-horizon]
process_name=%(program_name)s
command=php /www/wwwroot/larablog/artisan horizon
autostart=true
autorestart=true
user=www
redirect_stderr=true
stdout_logfile=/www/wwwroot/larablog/storage/logs/worker.log

更新和啓動進程

更新 Supervisor 配置,以包括我們的新服務:

sudo supervisorctl update

若遇到啓動錯誤,如 socket.error 報錯,試着直接啓動 supervisord

sudo supervisord -c /etc/supervisord.conf

# 然後再次嘗試執行重載配置命令
sudo supervisorctl update

查看進程狀態

最後,我們可以查看進程的狀態,確認服務是否被正確啓動:

sudo supervisorctl status

在 Ubuntu 上 安裝 Supervisor

安裝和配置 Supervisor 在 Ubuntu 系統上的流程與在 CentOS 上類似,但使用的包管理器為 apt

sudo apt-get install supervisor

隨後,添加和更新進程配置的流程相同,只是配置文件可能位於不同的目錄。在 Ubuntu 上,路徑可能是 /etc/supervisor/conf.d/

添加自定義配置信息

; vim /etc/supervisor/conf.d/larablog.conf

[program:larablog-horizon]
process_name=%(program_name)s
command=php /www/wwwroot/larablog/artisan horizon
...

接着使用 sudo supervisorctl update 來加載新配置,使用 sudo supervisorctl status 來查看服務狀態。

結語

無論你的服務器運行在哪個 Linux 發行版本上,Supervisor 都是一個強大且靈活的工具,可以幫助你管理後台進程。通過簡單的配置,你可以確保你的應用和服務能夠穩定運行,即使在遇到突發問題時也能自動恢復。

希望這篇指南能幫助你更好地理解和使用 Supervisor

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.