天天看點

centos7安裝supervisor及supervisor web管理界面、supervisor守護程序使用

yum安裝supervisor

yum install epel-release
yum install -y supervisor
systemctl enable supervisord # 開機自啟動
systemctl start supervisord # 啟動supervisord服務

systemctl status supervisord # 檢視supervisord服務狀态
ps -ef|grep supervisord # 檢視是否存在supervisord程序
           

yum安裝會生成一個配置檔案,路徑/etc/supervisord.conf,修改最後一行配置檔案路徑,可改可不改,我比較習慣conf配置

[unix_http_server]
file=/tmp/supervisor.sock   ;UNIX socket 檔案,supervisorctl用XML_RPC和supervisord通信就是通過它進行,如果不設定的話,supervisorctl也就不能用了 
;chmod=0700                 ;socket檔案的mode(權限),預設是0700
;chown=nobody:nogroup       ;socket檔案的owner(屬組),格式:uid:gid
;username=user              ;使用supervisorctl連接配接的時候,認證的使用者(預設沒有使用者名)
;password=123               ;和上面的使用者名對應的密碼,可以直接使用明碼,也可以使用SHA加密(預設沒有密碼)
;[inet_http_server]         ;偵聽在TCP上的socket,Web Server和遠端的supervisorctl都要用到它不設定的話,預設為不開啟。
;port=127.0.0.1:9001        ;這個是管理背景運作的IP和端口,偵聽所有IP用:9001或*:9001。如果上面的[inet_http_server]開啟了,就必須設定它。如果開放到公網,需要注意安全性
;username=user              ;同上面的[unix_http_server]使用者名配置一緻
;password=123               ;同上面的[unix_http_server]密碼配置一緻
 
[supervisord]				 ;這個主要是定義supervisord這個服務端程序的一些參數的
logfile=/tmp/supervisord.log ;這個是supervisord這個主程序的日志路徑,注意和子程序的日志沒有關系。預設是 $CWD/supervisord.log,$CWD是目前目錄。
logfile_maxbytes=50MB        ;日志檔案大小,預設50MB。超過50M的時候,會生成一個新的日志檔案;如果設成0,表示不限制大小。
logfile_backups=10           ;日志檔案保留備份數量預設10,設為0表示不備份
loglevel=info                ;日志級别,預設info,其它: critical, error, warn, info, debug, trace, or blather
pidfile=/tmp/supervisord.pid ;pid 檔案
nodaemon=false               ;是否在前台啟動,預設是false,即以 daemon 的方式啟動
minfds=1024                  ;可以打開的檔案描述符的最小值,預設 1024,低于這個值supervisor将不會啟動。
minprocs=200                 ;可以打開的程序數的最小值,預設200,低于這個值supervisor也将不會正常啟動。
;umask=022                   ;程序建立檔案的掩碼,預設為022。
;user=chrism                 ; 這個參數可以設定一個非root使用者,當我們以root使用者啟動supervisord之後。我這裡面設定的這個使用者,也可以對supervisord進行管理,預設情況是不設定。
;identifier=supervisor       ;這個參數是supervisord的辨別符,主要是給XML_RPC用的。當你有多個supervisor的時候,而且想調用XML_RPC統一管理,就需要為每個supervisor設定不同的辨別符,預設是supervisord。
;directory=/tmp              ;這個參數是當supervisord作為守護程序運作的時候,設定這個參數的話,啟動supervisord程序之前,會先切換到這個目錄預設不設定。
;nocleanup=true              ;這個參數當為false的時候,會在supervisord程序啟動的時候,把以前子程序産生的日志檔案(路徑為AUTO的情況下)清除掉。有時候咱們想要看曆史日志,當 然不想日志被清除了。是以可以設定為true,預設是false,有調試需求的同學可以設定為true。
;childlogdir=/tmp            ;當子程序日志路徑為AUTO(系統自動配置設定)的時候,子程序日志檔案的存放路徑。
;environment=KEY="value"     ;這個是用來設定環境變量的,supervisord在linux中啟動預設繼承了linux環境變量,在這裡可以設定supervisord程序特有的其他環境變量。supervisord啟動子程序時,子程序會拷貝父程序的記憶體空間内容。 是以設定的這些環境變量也會被子程序繼承。預設為不設定。
;strip_ansi=false            ;這個選項如果設定為true,會清除子程序日志中的所有ANSI 序列。什麼是ANSI序列呢?就是我們的\n,\t這些東西。預設為false。

[supervisorctl]				 ;這個主要是針對supervisorctl的一些配置  
serverurl=unix:///tmp/supervisor.sock ;通過UNIX socket連接配接supervisord,路徑與unix_http_server部分的file一緻
;serverurl=http://127.0.0.1:9001 ; 通過HTTP的方式連接配接supervisord
;username=chris              ;使用者名,預設空
;password=123                ;密碼,預設空。
;prompt=mysupervisor         ;輸入使用者名密碼時候的提示,預設supervisor。                   
;history_file=~/.sc_history  ;這個參數和shell中的history類似,我們可以用上下鍵來查找前面執行過的指令預設是no file的。是以我們想要有這種功能,必須指定一個檔案。


;[program:xx]			     ;是被管理的程序配置參數,xx是程序的名稱
;command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run  ;程式啟動指令;可以帶參數,如:/home/test.py -a 'hehe'有一點需要注意的是,我們的command隻能是那種在終端運作的程序,不能是守護程序。這個想想也知道了,比如說command=service httpd start。httpd這個程序被linux的service管理了,我們的supervisor再去啟動這個指令,這已經不是嚴格意義的子程序了。
;directory=/tmp                ;程序運作前,會前切換到這個目錄
;autostart=true              ;在supervisord啟動的時候也自動啟動
;startsecs=10         		 ;啟動10秒後沒有異常退出,就表示程序正常啟動了,預設為1秒。
;autorestart=true     		 ;程式退出後自動重新開機,可選值:[unexpected,true,false],預設為unexpected,表示程序意外殺死後才重新開機
這個是設定子程序挂掉後自動重新開機的情況,如果為false的時候,無論什麼情況下,都不會被重新啟動,如果為unexpected,隻有當程序的退出碼不在下面的exitcodes裡面定義的退出碼的時候,才會被自動重新開機。當為true的時候,隻要子程序挂掉,将會被無條件的重新開機。                               
;exitcodes=0,2               ;注意和上面的的autorestart=unexpected對應。exitcodes裡面的定義的退出碼是expected的。
;stopsignal=QUIT             ;程序停止信号,可以為TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信号。預設為TERM 。當用設定的信号去幹掉程序,退出碼會被認為是expected。    
;stopwaitsecs=10             ;這個是當我們向子程序發送stopsignal信号後,到系統傳回資訊給supervisord,所等待的最大時間。 超過這個時間,supervisord會向該子程序發送一個強制kill的信号。 預設為10秒。
;startretries=3       		 ;啟動失敗自動重試次數,預設是3。當超過3次後,supervisor将把此程序的狀态置為FAIL
;user=tomcat          		 ;用哪個使用者啟動程序,預設是root。如果supervisord是root啟動,我們在這裡設定這個非root使用者,可以用來管理該program。
;priority=999         		 ;程序啟動優先級,預設999,值小的優先啟動
;redirect_stderr=true ;把stderr重定向到stdout,預設false
;stdout_logfile_maxbytes=20MB ;stdout日志檔案大小,預設50MB
;stdout_logfile_backups = 20  ;stdout日志檔案備份數,預設是10
;stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out ;程序的stdout的日志路徑,可以指定路徑,AUTO,none等三個選項。設定為none的話,将沒有日志産生。設定為AUTO的話,将随機找一個地方生成日志檔案,而且當supervisord重新啟動的時候,以前的日志檔案會被清空。當 ;redirect_stderr=true的時候,sterr也會寫進這個日志檔案。需要注意當指定目錄不存在時無法正常啟動,是以需要手動建立目錄(supervisord 會自動建立日志檔案)
;stopasgroup=false    		 ;預設為false,程序被殺死時,是否向這個程序組發送stop信号,包括子程序。主要用于,supervisord管理的子程序,這個子程序本身還有子程序。那麼我們如果僅僅幹掉supervisord的子程序的話,子程序的子程序有可能會變成孤兒程序。是以咱們可以設定可個選項,把整個該子程序的整個程序組都幹掉。 設定為true的話,一般killasgroup也會被設定為true。需要注意的是,該選項發送的是stop。預設為false。
;killasgroup=false     		 ;信号預設為false,不過向程序組發送的是kill信号
;stderr_capture_maxbytes=1MB   ;這個一樣,和stdout_capture一樣。 預設為0,關閉狀态
;stderr_events_enabled=false   ;這個也是一樣,預設為false
;environment=A="1",B="2"       ;這個是該子程序的環境變量,和别的子程序是不共享的
;serverurl=AUTO    

;[group:thegroupname]  ;就是給programs(子程序)分組,劃分到組裡面的program。我們就不用一個一個去操作了,我們可以對組名進行統一的操作。 注意:program被劃分到組裡面之後,就相當于原來的配置從supervisor的配置檔案裡消失了。supervisor隻會對組進行管理,而不再會對組裡面的單個program進行管理了
;programs=progname1,progname2 ;組成員,用逗号分開。
;priority=999                  ;優先級,相對于組群組之間說的。預設999。
 
;包含其它配置檔案		;當我們要管理的程序很多的時候,都寫在主配置檔案就不太合适了,這個時候可以把配置資訊寫到多個檔案中,然後include過來
[include]
files = supervisord.d/*.conf; 配置檔案路徑,看個人喜好,我偏向以conf結尾
           

在配置檔案路徑下建立test.conf,内容如下

[program:test] #程式的名稱
command=/usr/local/php/bin/php /mnt/hgfs/project/www/blog/artisan command:test #執行的指令
autostart=true #是否跟随supervisord的啟動而啟動
autorestart=true #程式退出後自動重新開機,可選值:[unexpected,true,false],預設為unexpected,表示程序意外殺死後才重新開機stopasgroup=true;程序被殺死時,是否向這個程序組發送stop信号,包括子程序
user=root #執行程序的使用者
startsecs = 1 #自動重新開機時間間隔(s)
numprocs=1 #程序數
redirect_stderr=true #是否重定向錯誤日志至輸出日志
stdout_logfile=/etc/supervisord.d/logs/test.log #标準輸出日志 注意:要建立logs檔案夾,test.log會自動生成,但是logs檔案夾需要手動建,否則會報錯
           

校驗配置檔案是否有修改

更新配置

檢視supervisor狀态

supervisorctl status
test                             RUNNING   pid 2470, uptime 0:00:01
           

或者檢視要管理的程序是否啟動,本例中可以使用下面的指令

ps -ef | grep test
root       2195   2105  6 18:57 ?        00:00:00 /usr/local/php/bin/php /mnt/hgfs/project/www/blog/artisan command:test
root       2203   1186  0 18:57 pts/0    00:00:00 grep --color=auto test

           

重新啟動配置中所有程式

supervisorctl reload
           

停止所有程式

supervisorctl stop all
           

配置supervisor web管理界面

#第一步 進入配置檔案
vi /etc/supervisord.conf

#第二步 把下面配置分号去掉
[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 reload
           

浏覽器通路 192.168.22.3:9001 (注:筆者是本地通路虛拟機環境)

centos7安裝supervisor及supervisor web管理界面、supervisor守護程式使用