supervisor

ouer1994發表於2019-10-25

Supervisor[筆記]

supervisord -h 檢視 supervisord 命令幫助

supervisorctl -h 檢視 supervisorctl 命令幫助

supervisorctl help 檢視 supervisorctl 的 Action 命令

supervisorctl help 任意一個Action 檢視這個 Action 的使用

1. 簡介

Supervisor 是一個程式控制系統. 通俗點說, 它可以監控你的程式, 程式異常退出, 它可以自動幫你重啟程式.所以我們可以使用它來監控佇列消費程式 等等

2. 安裝

2.1 使用 包管理器 安裝(安裝的不是最新版本)

# Ubuntu 
sudo apt install supervisor

# Centos
sudo yum install supervisor

2.2 使用 pip 安裝

pip install supervisor

3. 建立配置檔案

Supervisor 安裝以後, 執行 echo_supervisord_conf 命令, 會在終端輸出預設配置. 看到配置內容後, 執行 echo_supervisord_conf > /etc/supervisord.conf 將輸出預設配置輸出到 /etc/supervisord.conf 檔案中. 配置檔案就建立好了.

4. 啟動 Supervisor

直接在終端執行 supervisord 就會將 supervisor 啟動. 這個命令預設用的是 /etc/supervisord.conf 這個配置檔案. 如果你想使用自定義的配置檔案啟動 Supervisor , 執行 supervisord -c 配置檔案.

5. 使用 Supervisor

Supervisor 有 supervisord, supervisorctl, Web Server, XML-RPC Interface 四個部分:

  1. supervisord 用於啟動 服務端 程式.
  2. supervisorctl 相當於啟動一個客戶端, 用來管理其下的程式.
  3. Web Server 提供 web 服務, 方便你檢視程式狀態
  4. XML-RPC Interface (沒用過)

6. 常用命令

有兩種使用方式, 你可以直接在終端輸入 supervisorctl 啟動客戶端, 然後輸入 status update 之類的命令來管理程式. 或者 直接輸入 supervisorctl status supervisorctl update .

  • status: 檢視程式狀態
  • stop: 關閉程式
  • start: 啟動程式
  • restart: 重啟程式
  • reread: 讀取有更新的配置檔案,不會重啟程式
  • update: 重啟配置檔案修改過的程式
  • tail: 檢視程式日誌

7. 程式配置檔案

; 冒號後為程式字首
[program:laravel-worker]
; 程式名稱
process_name=%(program_name)s_%(process_num)02d
; 程式執行的命令
command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3
; 如果是 true, 當 supervisor 啟動時, 程式將會自動啟動
autostart=true
; 檢測到程式退出時是否自動重啟
autorestart=true
; 執行程式的使用者
user=forge
; 程式數量
numprocs=8
; 重定向錯誤流到標準輸出,等價於 2>&1
redirect_stderr=true
; 標準日誌輸出檔案
stdout_logfile=/home/forge/app.com/worker.log

預設配置的最後有這麼一段:

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

意思是 supervisor 會讀取 supervisord.d 下的 .ini 檔案, 所以把你的配置檔案按要求命名儲存就可以了.

8. 命令詳解

8.1 清理日誌

clear <name>            Clear a process' log files.
clear <name> <name>     Clear multiple process' log files
clear all               Clear all process' log files

8.2 重啟程式

restart <name>          Restart a process
restart <gname>:*       Restart all processes in a group
restart <name> <name>   Restart multiple processes or groups
restart all             Restart all processes
Note: restart does not reread config files. For that, see reread and update.(重啟不會重新讀取配置檔案)

8.3 啟動程式

start <name>            Start a process
start <gname>:*         Start all processes in a group
start <name> <name>     Start multiple processes or groups
start all               Start all processes

8.4 停止程式

stop <name>             Stop a process
stop <gname>:*          Stop all processes in a group
stop <name> <name>      Stop multiple processes or groups
stop all                Stop all processes

8.5 update: 重新載入配置, 根據需要增加或移除程式

update                  Reload config and add/remove as necessary
update all              Reload config and add/remove as necessary
update <gname> [...]    Update specific groups

8.6 展示所有管理的程式

avail                   Display all configured processes

8.7 reload: 重啟 supervisord(修改 supervisord.conf 需要執行的操作)

reload          Restart the remote supervisord

8.8 reread: 讀取有更新的配置檔案,不會重啟程式

reread                  Reload the daemon's configuration files

8.9 結束 supervisord 程式

shutdown        Shut the remote supervisord down

8.10 檢視程式狀態

status <name>           Get status for a single process
status <gname>:*        Get status for all processes in a group
status <name> <name>    Get status for multiple named processes
status                  Get all process status info

9. 優秀連結

相關文章