有啥用?

很多我們專案排期進入聯調、測試階段,如果QA同學是直接跟你要一個後端環境的話,那簡單點大概率你就直接使用./xxx &的方式啟動程式。

但是說不定他測著測著觸發了啥預期外的東西,程式就掛了。這時你可能還沒到公司呢!QA同學就給你打電話來了,一頓客套話,辛苦xxx同學幫忙啟動一下後端的程式......

所以瞭解下supervisor這個工具還是很有必要的,它可以自動將掛了的程式重新拉起來。然後我們還能指定它的錯誤日誌輸出的位置。程式碼上線前,我們不僅可以關注到QA同學提到的Case,還能去看看程式的error logwanring log中有沒有QA同學沒有發現的問題,雙份保險。

嗯......

supervisor用起來很簡單,4分鐘瞭解下即可。

安裝

 ~]# yum list | grep  supervisor

安裝之後,我們就得到的瞭如下3個二進位制的命令:

echo_supervisor_conf: 將supervisor相關的所有配置打印出來。

supervisord:啟動命令。

supervisorctl:管理我們託管進supervisor中的程序。

生成配置檔案

其實你安裝完supervisor之後,會自動生成一份配置檔案:/etc/supervisor.conf

但是我發現在centos6中的安裝的supervisor生成的配置檔案不能直接用,少了很多東西。所以才有了本小結中的手動生成一份配置檔案。

 ~]# echo_supervisord_conf > /etc/supervisord.conf

你可以參照下面的配置,去修改你的自己的配置,其實我也沒有定製什麼東西,就是保留了必要的配置引數而已。

1、配置檔案中的; 是註釋符號

2、為了讓篇幅短一點,配置檔案中沒啥用的配置、註釋、或者像什麼提供一個視覺化的介面這種雞肋的東西,我就直接刪掉了。有一天你自己的真正去用的時候可以挨個看看,也都不復雜。

[unix_http_server]
file=/run/supervisor.sock ; (the path to the socket file) [supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false ; (start in foreground if true;default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200) [rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl]
serverurl=unix:///run/supervisor.sock ; use a unix:// URL for a unix socket [include]
files = supervisord.d/*.ini

第一個注意點:linux中的程式啟動之後,會有個對應的socket檔案。supervisord啟動之後這個socket檔案位置通過[unix_http_server]中的file指定。 而且supervisorctl命令需要和supervisord在本地基於socket檔案互動,所以[supervisorctl]serverurl要和[unix_http_server]中的file保持同步。

第二個注意點:其實希望大家重點關注的就是上面這個配置檔案中`[include]`部分,它會載入supervisord.d/目錄下所有的x.ini檔案。

在/etc目錄下建立:supervisord.d目錄存放ini檔案。

*.ini檔案是啥呢?

答案:比如你想將程式A託付給supervisor管理,那就按要求的格式,為程式A建立一個A.ini配置檔案,在這個檔案中定義好,程式A的二進位制檔案在哪裡、執行啥命令啟動程式A、日誌檔案在哪裡...等等。

啟動supervisor

Centos7

systemctl start supervisord;systemctl enable supervisord

Centos6

# 檢視幫助文件
~]# supervisord --help
supervisord -- run a set of applications as daemons.
Usage: /root/.jumbo/bin/supervisord [options] Options:
-c/--configuration FILENAME -- configuration file path (searches if not given)
... # 啟動
~]# supervisord -c /etc/supervisord.conf

自定義配置檔案

*.ini檔案的格式可以通過echo_supervisor_conf命令找到,它就長下面這樣:

所以參考這個配置檔案,我們可以搞一個自己的ini配置,如下:

[program:bairimeng_machi]
;bairimeng_machi是自定義的專案名稱,之後supercisorctl命令管理bairimeng_machi
;command 啟動程式的相對路徑, can take args
command=/home/worker/workerspace/machi.sh
numprocs=1
;directory 在執行command之前,需要切換到哪個目錄中
directory=/home/worker/workerspace/
;supervisord啟動時,是否同時啟動
autostart=true
;autorestart意外退出後,是否重新啟動
autorestart=true
startsecs=30
startretries=3
exitcodes=0,2
stopsignal=QUIT
stopwaitsecs=10
;user 使用哪個使用者啟動本程式
user=worker
;redirect_stderr將標準錯誤,重定向到標準輸出
redirect_stderr=true
;stdout_logfile 標準輸出的日誌檔案的位置
stdout_logfile=/home/worker/workerspace/etcd.stdout.log
stdout_logfile_maxbytes=64MB
stdout_logfile_backups=5
stdout_capture_maxbytes=1MB
stdout_events_enabled=false

配置檔案中的目錄最好提前創建出來,並把所有者、所屬組都指向配置檔案中:user 部分指定的使用者。

不然很可能因為該使用者沒有建立目錄的許可權,而導致整個任務失敗。

控制命令

當有新的ini檔案被託管進來時,執行如下命令啟動被託管的程式

]# supervisorctl update

檢視被託管程式的狀態:

]# supervisorctl status  bairimeng_machi
bairimeng_machi STARTING ]# supervisorctl status bairimeng_machi
bairimeng_machi RUNNING pid 10630, uptime 0:02:17

關閉被託管的程式

]# supervisorctl stop bairimeng_machi
bairimeng_machi: stopped ]# supervisorctl status bairimeng_machi
bairimeng_machi STOPPED Aug 29 11:38 PM

啟動程式

]# supervisorctl start bairimeng_machi
bairimeng_machi: started ]# supervisorctl status bairimeng_machi
bairimeng_machi RUNNING pid 17810, uptime 0:01:06

重啟

supervisorctl restart bairimeng_machi

重新啟動配置中的所有程式

]# supervisorctl reload
Restarted supervisord ]# supervisorctl status bairimeng_machi
bairimeng_machi STARTING

到這裡,你就可以放心大膽的去做別的事了,程式掛掉之後,supervisor會自動幫你拉起的。

求關注啦