supervisor進程管理程序

一.supervisor簡介
Supervisor是用Python開發的一套通用的進程管理程序,能將一個普通的命令行進程變爲後臺daemon,並監控進程狀態,異常退出時能自動重啓。它是通過fork/exec的方式把這些被管理的進程當作supervisor的子進程來啓動,這樣只要在supervisor的配置文件中,把要管理的進程的可執行文件的路徑寫進去即可。也實現當子進程掛掉的時候,父進程可以準確獲取子進程掛掉的信息的,可以選擇是否自己啓動和報警。supervisor還提供了一個功能,可以爲supervisord或者每個子進程,設置一個非root的user,這個user就可以管理它對應的進程。

注意:
supervisor在docker裏管理多個進程十分方便

二.安裝
1.通過python pip安裝
yum install python-setuptools
easy_install pip
pip install supervisor

2.創建配置文件夾
mkdir /etc/supervisor 主配置文件夾
mkdir /etc/supervisor/conf.d 子進程文件夾
mkdir /etc/supervisor/pid 主進程pid
mkdir /etc/supervisor/run 主進程socket

3.創建supervisor 主配置文件
vim /etc/supervisor/supervisord.conf

[supervisord]
logfile = /etc/supervisor/log/supervisord.log
logfile_maxbytes = 50MB
logfile_backups=10
loglevel = info
pidfile = /etc/supervisor/run/supervisord.pid
nodaemon = false
minfds = 1024
minprocs = 200
umask = 022
user = root
identifier = supervisor
directory = /etc/supervisor/
nocleanup = true
childlogdir = /etc/supervisor/log
strip_ansi = false

[supervisorctl]
serverurl = unix:///etc/supervisor/run/supervisord.sock
#serverurl = http://127.0.0.1:9001
prompt = supervisor
chmod = 0777

[unix_http_server]
file=/etc/supervisor/run/supervisord.sock

[inet_http_server]
port=*:9001

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[include]
files=/etc/supervisor/conf.d/*.conf

4.啓動服務
supervisord -c /etc/supervisor/supervisord.conf

三.創建nginx服務,使用supervisor監控服務進程
1.源碼編譯安裝nginx
supervisor進程管理程序

測試手動可以正常啓動nginx

2.在/etc/supervisor/conf.d 創建nginx服務進程配置文件
vim /etc/supervisor/conf.d/nginx.conf
[program:nginx]
command=/usr/local/nginx/sbin/nginx -g 'daemon off;'
process_name=nginx
directory=/usr/local/nginx
autostart=true
autorestart=true
startsecs=10
startretries=2
exitcodes=0,2
stopsignal=TERM
stopwaitsecs=10
user=root
redirect_stderr=true
stdout_logfile=NONE
redirect_stdout=true
stderr_logfile=NONE

3.啓動服務,正常
[root@server2 conf.d]# supervisorctl update
[root@server2 conf.d]# supervisorctl status
supervisor進程管理程序

supervisor進程管理程序

四.創建tomcat服務,使用supervisor監控服務進程

1.安裝java
supervisor進程管理程序
supervisor進程管理程序

2.安裝tomcat
.supervisor進程管理程序

3.在/etc/supervisor/conf.d 創建tomcat服務進程配置文件
vim /etc/supervisor/conf.d/tomcat.conf
[program:tomcat]
command=/usr/local/apache-tomcat-8.5.53/bin/catalina.sh run
process_name=tomcat
numprocs=1
directory=/usr/local/apache-tomcat-8.5.53
autostart=true
autorestart=true
startsecs=10
startretries=2
exitcodes=0,2
stopsignal=TERM
stopwaitsecs=10
user=root
redirect_stderr=true
stdout_logfile=NONE
redirect_stdout=true
stderr_logfile=NONE
environment=JAVA_HOME="/usr/jdk/",JAVA_BIN="/usr/jdk/bin"

4.啓動服務,正常
[root@server2 conf.d]# supervisorctl update
[root@server2 conf.d]# supervisorctl status
supervisor進程管理程序

五.命令簡介
supervisorctl status //查看所有進程的狀態
supervisorctl stop nginx //停止nginx
supervisorctl start nginx //啓動nginx
supervisorctl restart nginx //重啓nginx
supervisorctl update //配置文件修改後使用該命令加載新的配置
supervisorctl reload //重新啓動配置中的所有程序

六.program配置講解

  • command:啓動程序使用的命令,可以是絕對路徑或者相對路徑
  • process_name:一個python字符串表達式,用來表示supervisor進程啓動的這個的名稱,默認值是%(program_name)s
  • numprocs:Supervisor啓動這個程序的多個實例,如果numprocs>1,則process_name的表達式必須包含%(process_num)s,默認是1
  • numprocs_start:一個int偏移值,當啓動實例的時候用來計算numprocs的值
  • priority:權重,可以控制程序啓動和關閉時的順序,權重越低:越早啓動,越晚關閉。默認值是999
  • autostart:如果設置爲true,當supervisord啓動的時候,進程會自動重啓。
  • autorestart:值可以是false、true、unexpected。false:進程不會自動重啓,unexpected:當程序退出時的退出碼不是exitcodes中定義的時,進程會重啓,true:進程會無條件重啓當退出的時候。
  • startsecs:程序啓動後等待多長時間後才認爲程序啓動成功
  • startretries:supervisord嘗試啓動一個程序時嘗試的次數。默認是3
  • exitcodes:一個預期的退出返回碼,默認是0,2。
  • stopsignal:當收到stop請求的時候,發送信號給程序,默認是TERM信號,也可以是 HUP, INT, QUIT, KILL, USR1, or USR2。
  • stopwaitsecs:在操作系統給supervisord發送SIGCHILD信號時等待的時間
  • stopasgroup:如果設置爲true,則會使supervisor發送停止信號到整個進程組
  • killasgroup:如果設置爲true,則在給程序發送SIGKILL信號的時候,會發送到整個進程組,它的子進程也會受到影響。
  • user:如果supervisord以root運行,則會使用這個設置用戶啓動子程序
  • redirect_stderr:如果設置爲true,進程則會把標準錯誤輸出到supervisord後臺的標準輸出文件描述符。
  • stdout_logfile:把進程的標準輸出寫入文件中,如果stdout_logfile沒有設置或者設置爲AUTO,則supervisor會自動選擇一個文件位置。
  • stdout_logfile_maxbytes:標準輸出log文件達到多少後自動進行輪轉,單位是KB、MB、GB。如果設置爲0則表示不限制日誌文件大小
  • stdout_logfile_backups:標準輸出日誌輪轉備份的數量,默認是10,如果設置爲0,則不備份
  • stdout_capture_maxbytes:當進程處於stderr capture mode模式的時候,寫入FIFO隊列的最大bytes值,單位可以是KB、MB、GB
  • stdout_events_enabled:如果設置爲true,當進程在寫它的stderr到文件描述符的時候,PROCESS_LOG_STDERR事件會被觸發
  • stderr_logfile:把進程的錯誤日誌輸出一個文件中,除非redirect_stderr參數被設置爲true
  • stderr_logfile_maxbytes:錯誤log文件達到多少後自動進行輪轉,單位是KB、MB、GB。如果設置爲0則表示不限制日誌文件大小
  • stderr_logfile_backups:錯誤日誌輪轉備份的數量,默認是10,如果設置爲0,則不備份
  • stderr_capture_maxbytes:當進程處於stderr capture mode模式的時候,寫入FIFO隊列的最大bytes值,單位可以是KB、MB、GB
  • stderr_events_enabled:如果設置爲true,當進程在寫它的stderr到文件描述符的時候,PROCESS_LOG_STDERR事件會被觸發
  • environment:一個k/v對的list列表
  • directory:supervisord在生成子進程的時候會切換到該目錄
  • umask:設置進程的umask
  • serverurl:是否允許子進程和內部的HTTP服務通訊,如果設置爲AUTO,supervisor會自動的構造一個url
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章