Supervisor

Supervisor is a client/server system that allows its users to control a number of processes on 
UNIX-like operating systems.

注意:python

Supervisor has been tested and is known to run on Linux (Ubuntu 9.10), Mac OS X (10.4/10.5/10.6), 
and Solaris (10 for Intel) and FreeBSD 6.1. It will likely work fine on most UNIX systems. Supervisor will not run at all under any version of Windows. Supervisor is known to work with Python 2.4 or later but will not work under any version of
  Python 3.

 

線上環境服務中止:
1、手動重啓
2、集羣、負載均衡
3、supervisor
    前提: 沒有集羣、負載均衡, 手動啓動時間又沒法接收


優勢:
    出現問題,能夠立刻拉起程序
    啓動自動化,減小人爲因素的干預
缺點:
    程序自己有BUG,它掛掉了,但又經過supervisor起來了(若果它對系統產生影響,例如open-files,它不斷打開文件,達到系統上限,--》系統崩潰,
有一個影響,加重影響)

 

 

特色:web

  • 簡單
  • 高效
  • 集中
  • 可擴展

組成:shell

  • supervisord:服務器部分(監督者)
功能:在本身的調用中啓動子程序,響應客戶機的命令,從新啓動崩潰或推出子進程,記錄其子進程stdout和stderr輸出,
生成和處理子進程生命週期中對應的‘事件’
  • supervisorctl:客戶機部分
提供了一個相似於shell的接口,能夠鏈接到監視器提供的特性。客戶能夠從weaksorctl鏈接到不一樣的監控程序(一次一個),
得到被監控子進程的狀態,中止並從新啓動子進程,並得到監控進程的運行列表
  • Web Server
能夠經過瀏覽器訪問server url  查看和控制進程的狀態
  • xml-rpc接口
該接口可用於詢問和控制主管及其運行的程序

 

 

安裝:瀏覽器

sudo apt-get install supervosor
->配置文件已經在/etc/supervisor/supervisord.conf

 # 主要修改如下內容tomcat

;[eventlistener:theeventlistenername]
;command=/bin/eventlistener    ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1                    ; number of processes copies to start (def 1)
;events=EVENT                  ; event notif. types to subscribe to (req'd)
;buffer_size=10                ; event buffer queue size (default 10)
;directory=/tmp                ; directory to cwd to before exec (def no cwd)
;umask=022                     ; umask for process (default None)
;priority=-1                   ; the relative start priority (default -1)
;autostart=true                ; start at supervisord start (default: true)
;autorestart=unexpected        ; whether/when to restart (default: unexpected)
;startsecs=1                   ; number of secs prog must stay running (def. 1)
;startretries=3                ; max # of serial start failures (default 3)
;exitcodes=0,2                 ; 'expected' exit codes for process (default 0,2)
;stopsignal=QUIT               ; signal used to kill process (default TERM)
;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
;stopasgroup=false             ; send stop signal to the UNIX process group (default false)
;killasgroup=false             ; SIGKILL the UNIX process group (def false)
;user=chrism                   ; setuid to this UNIX account to run the program
;redirect_stderr=true          ; redirect proc stderr to stdout (default false)
;stdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10     ; # of stdout logfile backups (default 10)
;stdout_events_enabled=false   ; emit events on stdout writes (default false)
;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups        ; # of stderr logfile backups (default 10)
;stderr_events_enabled=false   ; emit events on stderr writes (default false)
;environment=A="1",B="2"       ; process environment additions
;serverurl=AUTO                ; override serverurl computation (childutils)
stopasgroup = true    # 若是supervisor 管理的晉升px又產生了若干子進程,使用supervisor中止px京城,
      中止信號會傳播給px產生的全部子進程,確保子進程也一塊兒中止。這一配置對但願中止全部進程的需求是很是有用的 autostart =true # 當啓動supervisor的時候講該配置項設置爲true的全部進程自動啓動

 

 一個例子安全

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
chmod=0777


[inet_http_server]         ; HTTP 服務器,提供 web 管理界面
port=127.0.0.1:9001      ; Web 管理後臺運行的 IP 和端口,若是開放到公網,須要注意安全性
username=admin             ; 登陸管理後臺的用戶名
password=1qaz@WSX?         ; 登陸管理後臺的密碼

[supervisord]
logfile=/tmp/supervisord.log ; 日誌文件,默認是 $CWD/supervisord.log
logfile_maxbytes=50MB        ; 日誌文件大小,超出會 rotate,默認 50MB
logfile_backups=10           ; 日誌文件保留備份數量默認 10
loglevel=info                ; 日誌級別,默認 info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ; pid 文件
nodaemon=false               ; 是否在前臺啓動,默認是 false,即以 daemon 的方式啓動
minfds=1024                  ; 能夠打開的文件描述符的最小值,默認 1024
minprocs=200                 ; 能夠打開的進程數的最小值,默認 200

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
; 包含其餘的配置文件 

[program:xxx]
command=python /home/ace/桌面/camera/sd/123.py

 

[program:tomcat]
directory = /app/zpy/tomcat/bin/ ; 程序的啓動目錄
command = sh startup.sh  ; 啓動命令,能夠看出與手動在命令行啓動的命令是同樣的
autostart = true     ; 在 supervisord 啓動的時候也自動啓動
startsecs = 5        ; 啓動 5 秒後沒有異常退出,就看成已經正常啓動了
autorestart = true   ; 程序異常退出後自動重啓
startretries = 3     ; 啓動失敗自動重試次數,默認是 3
user = zpy          ; 用哪一個用戶啓動
redirect_stderr = true  ; 把 stderr 重定向到 stdout,默認 false
stdout_logfile_maxbytes = 20MB  ; stdout 日誌文件大小,默認 50MB
stdout_logfile_backups = 20     ; stdout 日誌文件備份數
; stdout 日誌文件,須要注意當指定目錄不存在時沒法正常啓動,因此須要手動建立目錄(supervisord 會自動建立日誌文件)
stdout_logfile = /app/zpy/supervisor/usercenter_stdout.log

 

 

確保配置無誤後能夠再每臺主機上使用如下的命令啓動supervisor的服務端supervisord服務器

sudo supervisord -c  /etc/supervisor/supervisord.conf       # 啓動
supervisorctl shutdown # 中止supervisord
supervisorctl reload # 從新加載配置文件

 

進程管理app

supervisorctl   start  all    啓動管理的全部進程
supervisorctl   stop   all    中止全部
supervisorctl -c /etc/supervisor/supervisord.conf  需指定同一個配置文件 supervisorctl    start program-name // program-name 爲【program:xxx】 supervisorctl    stop ............... supervisorctl restart all //重啓全部 supervisorctl restart program-name supervisorctl    status      產看當前管理的全部進程的狀態

unix:///tmp/supervisor.sock no such file負載均衡

出現上述錯誤的緣由是supervisord並未啓動,只要在命令行中使用命令sudo supervisord啓動supervisord便可。socket

相關文章
相關標籤/搜索