Supervisor官方文檔:http://supervisord.org/index.htmlhtml
Supervisor是一個進程管理工具,當進程中斷的時候Supervisor能自動從新啓動它。能夠運行在各類類unix的機器上,不支持windows,Python編寫,python版本大於2.4,不支持3,因此python3.x是不能安裝supervisor,只有2.x能夠安裝python
1、安裝supervisor
我因爲pip install supervisor下載下來可能由於網絡緣由因此採用了 方法二安裝的ios
方法1、web
yum install python-setuptools easy_install supervisor supervisord -v
方法2、shell
wget https://pypi.python.org/packages/source/s/supervisor/supervisor-3.1.3.tar.gz tar zxvf supervisor-3.1.3.tar.gz cd supervisor python setup.py install
注意:我升級了python2.6.6到python2.7.13,因此安裝的時候多是
python2.7 setup.py install 這樣json
方法3、vim
yum install -y epel-release yum install -y supervisor
方法4、利用pip安裝
我是下載了setuptools和pip包 安裝完後 用pip安裝superviosrwindows
unzip setuptools-36.6.0.zip cd setuptools-36.6.0 python setup.py install
tar xf pip-9.0.1.tar.gz cd pip-9.0.1 python setup.py install
若是pip -V 提示沒有命令,那麼須要添加環境變量(最好都添加一下)centos
vim /etc/profile export PATH=/usr/local/python2.7/bin:$PATH source /etc/profile
`echo "export PATH=/usr/local/python2.7/bin:$PATH" >>/etc/profile``
pip升級命令:python3.x
pip install -U pip 或者下面這個 兩個功能等同 pip install --upgrade pip
可是首先要安裝 python2.7或者以上版本的python 可是最好別裝3.x的python可能會有問題目前來講
pip install supervisor`` 或者 tar zxvf supervisor-3.3.3.tar.gz cd supervisor python setup.py install
這裏python多是升級後的python2.7,要注意一下 supervisor官網使用pip install supervisor方式安裝的 **2、組件說明** 一、supervisord : 服務 二、supervisorctl:命令工具 3、若是是centos7上啓動服務並設置開機自動啓動,centos6.x見下面 systemctl start supervisord.service && systemctl enable supervisord.service 而後生成配置文件 supervisord.conf echo_supervisord_conf > /etc/supervisord.conf 建立目錄,之後須要用supervisor啓動的配置文件都放在這個目錄下便可 mkdir -p /etc/supervisor/conf.d/ 修改 /etc/supervisord.conf 中的 include 爲本身的配置文件存放地址。 vim /etc/supervisord.conf ;[include] ;files = relative/directory/*.ini 改爲下面的: [include] files = /etc/supervisor/conf.d/*.conf **sed方式更改:** sed -i 's@\;\[include\]@\[include\]@g' /etc/supervisord.conf sed -i 's@\;files \= relative\/directory\/\*\.ini@files \= \/etc\/supervisor\/conf.d\/\*\.conf@g' /etc/supervisord.conf
**指定配置文件啓動supervisor:** supervisord -c /etc/supervisord.conf
[root@localhost src]# ps -ef | grep supervisor root 2027 1 0 07:29 ? 00:00:00 /usr/local/python2.7/bin/python /usr/local/python2.7/bin/supervisord -c /etc/supervisord.conf root 2114 1782 0 07:44 pts/0 00:00:00 grep supervisor
supervisor的配置文件(除去了大部分沒必要要的文件)
[unix_http_server] file=/tmp/supervisor.sock ; UNIX socket 文件,supervisorctl 會使用 ;chmod=0700 ; socket 文件的 mode,默認是 0700 ;chown=nobody:nogroup ; socket 文件的 owner,格式: uid:gid ;[inet_http_server] ; HTTP 服務器,提供 web 管理界面 ;port=127.0.0.1:9001 ; Web 管理後臺運行的 IP 和端口,若是開放到公網,須要注意安全性 ;username=user ; 登陸管理後臺的用戶名 ;password=123 ; 登陸管理後臺的密碼 [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 ; the below section must remain in the config file for RPC ; (supervisorctl/web interface) to work, additional interfaces may be ; added by defining them in separate rpcinterface: sections [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///tmp/supervisor.sock ; 經過 UNIX socket 鏈接 supervisord,路徑與 unix_http_server 部分的 file 一致 ;serverurl=http://127.0.0.1:9001 ; 經過 HTTP 的方式鏈接 supervisord ; 包含其餘的配置文件 ;[include] ;files = relative/directory/*.ini ; 能夠是 *.conf 或 *.ini 若是在supervisor的目錄下放了新的conf文件。那麼能夠用reread讀取,update啓動新的進程 配置進程,在supervisord.conf 最後加上下面配置,固然你也能夠放到其餘文件,經過編輯supervisor的配置文件 include 引入 如: cd /etc/supervisor/conf.d/ vim ssserver.conf [program:ssserver] #ssserver是程序名。配置文件通常就是ssserver.conf這樣 command=/usr/local/bin/ssserver -c /etc/config.json #啓動命令。最好用絕對路徑 #process_name=%(program_name)s%(process_num)01d #每一個進程名稱,若是咱們下面的numprocs參數爲1的話,就不用管這個參數了,它默認值%(program_name)s也就是上面的那個program冒號後面的名字 numprocs=1 #啓動的數量 autostart=true #supervisor啓動的時候是否隨着同時啓動 autorestart=true #當程序跑出exit的時候,這個program會自動重啓 startretries=10 #程序失敗自動重啓次數 startsecs=3 #程序重啓時候停留在runing狀態的秒數 stopsignal=QUIT stopwaitsecs=10 #程序啓動10s後沒有異常退出,就當作正常啓動了 user=root #使用root用戶啓動 environment=LD_LIBRARY_PATH='/usr/local/lib' directory=/usr/local/bin/ #程序啓動目錄 redirect_stderr=true # 把 stderr 重定向到 stdout,默認 false stdout_logfile=/var/log/ssserver.log # stdout日誌文件路徑 stdout_logfile_maxbytes=100MB # stdout 日誌文件大小,默認 50MB stdout_logfile_backups=10 # stdout 日誌文件備份數
(更多配置說明請參考:http://supervisord.org/configuration.html)
示例解釋:
[program:theprogramname] ;定義監控系統的名稱 command=theprogramcmd ;重啓進程的命令 autorstart=true ;是否自動啓動 process_name=%(program_name)s ;進程名稱,默認是程序名稱 numprocs=1 ;進程數量 directory=/tmp ;路徑 umask=022 ;掩碼 priority=999 ;優先級,越大被開起的越早 autorestart=true ;自動重啓 startsecs=10 ;啓動等待時間(秒) startretries=3 ;啓動重試次數 stopsignal=TERM ;關閉信號 stopwaitsecs=10 ;關閉前等待時間 user=chrism ;監控用戶權限 redirect_stderr=false ;重定向報錯輸出到stdout 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 ;系統URL 而後supervisorctl 進入 supervisor的shell界面 而後 reread 重讀一下 update讓服務更新進來 就啓動了新的服務
**報錯:** #supervisorctl unix:///tmp/supervisor.sock no such file **解決:** 可能沒啓動服務,指定配置文件啓動服務便可 supervisord -c /etc/supervisord.conf
**報錯:** /var/log/supervisor/xxx_out.log does not exist **解決:** 緣由是/var/log/supervisor目錄不存在,去建立一個就能夠了 mkdir /var/log/supervisor