原文作者:studytime
原文鏈接:https://www.studytime.xin/
目錄
簡介
Supervisor 是一個進程控制系統。它是一個 C/S 系統 (注意:其提供 WEB 接口給用戶查詢和控制)。它允許用戶去監控和控制在類 UNIX 系統的進程。它的目標與 launchd、daemontools 和 runit 有些相似。但是與它們不一樣的是、它不是作為 init (進程號 pid 是 1) 運行。它是被用來控制進程、並且它在啟動的時候和一般程序並無二致。
作用
你的 Nginx,Tomcat,memcache,Redis… 會崩么?
那你自己寫的服務器監測腳本呢?
好吧、不要再糾結了、交給 Supervisor 吧!
它會幫你維護這些、即使它們不小心崩了、Supervisor 會幫你看住它們、維護它們。
名詞說明
supervisor:要安裝的軟件的名稱。
supervisord:裝好supervisor軟件后,supervisord用於啟動supervisor服務。
supervisorctl:用於管理supervisor配置文件中program。
安裝和配置
前置條件安裝前需要將用戶切換為root下
安裝Linux的epel的yum源的命令,某些yum源會提示無supervisor源碼包,此時可以使用此命令
yum install epel-release
安裝
yum install -y supervisor
設置開啟自啟
systemctl enable supervisord
啟動supervisord服務
systemctl start supervisord
# 重啟
systemctl restart supervisord
查看supervisord服務狀態
ps -ef|grep supervisord
配置
vim /etc/supervisord.conf
# 調整增加引入配置文件路徑,這個路徑放置項目對應的 supervisor 配置文件
[include]
files = /etc/supervisor/*.conf
配置模版
[program:laravel-worker1]
process_name=%(program_name)s_%(process_num)02d
command=php /home/wwwroot/studytime.xin/artisan queue:work redis --sleep=3 --tries=3 --daemon
autostart=true
autorestart=true
user=root
numprocs=3
redirect_stderr=true
stdout_logfile=/home/baihe/worker1.log
配置說明
;*為必須填寫項
;*[program:應用名稱]
[program:cat]
;*命令路徑,如果使用python啟動的程序應該為 python /home/test.py,
;不建議放入/home/user/, 對於非user用戶一般情況下是不能訪問
command=/bin/cat
;當numprocs為1時,process_name=%(program_name)s
;當numprocs>=2時,%(program_name)s_%(process_num)02d
process_name=%(program_name)s
;進程數量
numprocs=1
;執行目錄,若有/home/supervisor_test/test1.py
;將directory設置成/home/supervisor_test
;則command只需設置成python test1.py
;否則command必須設置成絕對執行目錄
directory=/tmp
;掩碼:--- -w- -w-, 轉換后rwx r-x w-x
umask=022
;優先級,值越高,最后啟動,最先被關閉,默認值999
priority=999
;如果是true,當supervisor啟動時,程序將會自動啟動
autostart=true
;*自動重啟
autorestart=true
;啟動延時執行,默認1秒
startsecs=10
;啟動嘗試次數,默認3次
startretries=3
;當退出碼是0,2時,執行重啟,默認值0,2
exitcodes=0,2
;停止信號,默認TERM
;中斷:INT(類似於Ctrl+C)(kill -INT pid),退出后會將寫文件或日志(推薦)
;終止:TERM(kill -TERM pid)
;掛起:HUP(kill -HUP pid),注意與Ctrl+Z/kill -stop pid不同
;從容停止:QUIT(kill -QUIT pid)
;KILL, USR1, USR2其他見命令(kill -l),說明1
stopsignal=TERM
stopwaitsecs=10
;*以root用戶執行
user=root
;重定向
redirect_stderr=false
stdout_logfile=/a/path
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stderr_logfile=/a/path
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB
;環境變量設置
environment=A="1",B="2"
serverurl=AUTO
瀏覽器查看進程信息配置說明
[inet_http_server] ; inet (TCP) server disabled by default
port=0.0.0.0:9001 ; (ip_address:port specifier, *:port for all iface)
username=user ; 用戶名 (default is no username (open server))
password=123 ; 密碼 (default is no password (open server))
其他常用命令
# 讀取有更新(增加)的配置文件,不會啟動新添加的程序
supervisorctl reread
# 重啟配置文件修改過的程序
supervisorctl update
# 啟動 larashop-worker 程序
supervisorctl start larashop-worker:*
# 查看狀態
supervisorctl status
常見問題以及說明
端口暫用,Error: Another program is already listening on a port that one of our HTTP servers is configured to use.
python 環境選擇上使用python2作為默認python版本
安裝啟動過程中提示無配置文件
easy_install supervisor
echo_supervisord_conf > /etc/supervisord.conf