supervisor安装和配置
supervisor 是由python語(yǔ)言編寫(xiě)、基于linux操作系統(tǒng)的一款服務(wù)器管理工具,用以監(jiān)控服務(wù)器的運(yùn)行,發(fā)現(xiàn)問(wèn)題能立即自動(dòng)預(yù)警及自動(dòng)重啟等功能。
Supervisor是一個(gè)進(jìn)程管理工具,官方的說(shuō)法
用途就是有一個(gè)進(jìn)程需要每時(shí)每刻不斷的跑,但是這個(gè)進(jìn)程又有可能由于各種原因有可能中斷。當(dāng)進(jìn)程中斷的時(shí)候我希望能自動(dòng)重新啟動(dòng)它,此時(shí),我就需要使用到了Supervisor
這個(gè)工具主要就兩個(gè)命令:
supervisord : supervisor的服務(wù)器端部分,啟動(dòng)supervisor就是運(yùn)行這個(gè)命令
supervisorctl:啟動(dòng)supervisor的命令行窗口。
安裝(Centos):
成功安裝后可以登陸python控制臺(tái)輸入import supervisor 查看是否能成功加載。
生成配置文件(supervisord.conf):
echo_supervisord_conf > /etc/supervisord.conf
修改配置文件:
在supervisord.conf最后增加(分號(hào)后邊的表示注釋,可以不寫(xiě)):
運(yùn)行命令:
supervisord -c /etc/supervisord.conf ?//啟動(dòng)supervisor
supervisorctl //打開(kāi)命令行
ctl中: help //查看命令
ctl中: status //查看狀態(tài)
另外需要注意:如果修改了 /etc/supervisord.conf ,需要執(zhí)行 supervisorctl reload 來(lái)重新加載配置文件,否則不會(huì)生效。。。
[配置文件]
[root@vm source]# echo_supervisord_conf > /etc/supervisord.conf[監(jiān)視一個(gè)程序]
; The [include] section can just contain the "files" setting. This ; setting can list multiple files (separated by whitespace or ; newlines). It can also contain wildcards. The filenames are ; interpreted as relative to this file. Included files *cannot* ; include files themselves.[include] /**我是注釋,一定要把前面的分號(hào);去掉,不然不會(huì)開(kāi)啟include功能,太傻了**/ files = /etc/supervisor/*.ini在?/etc/supervisor/?目錄下建立?redis.ini?文件
[program:redis] command=/usr/bin/redis-server /usr/local/redis/redis.conf autorstart=true autorestart=true stdout_logfile=/tmp/supervisor.log[Web配置]
[inet_http_server] ; inet (TCP) server disabled by default port=*: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))如果配置了用戶名和密碼,就需要輸入用戶名和密碼才能進(jìn)入web界面。
[啟動(dòng)supervisord]
[root@vm source]# supervisord可能會(huì)輸出一堆信息出來(lái)/usr/lib/python2.6/site-packages/supervisor-3.1.3-py2.6.egg/supervisor/options.py:296: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.'Supervisord is running as root and it is searching ' /usr/lib/python2.6/site-packages/supervisor-3.1.3-py2.6.egg/supervisor/options.py:383: DeprecationWarning: Parameters to load are deprecated. Call .resolve and .require separately.return pkg_resources.EntryPoint.parse("x="+spec).load(False)不用管它
[root@vm source]# ps -ef |grep supervisordroot 20041 1 0 03:21 ? 00:00:00 /usr/bin/python /usr/bin/supervisord[root@vm source]# ps -ef| grep redisroot 20074 20073 0 03:23 ? 00:00:00 /usr/bin/redis-server *:6379有上述進(jìn)程,就表明成功了。
[WEB管理界面]
[命令行管理工具]
[root@vm source]# supervisorctl status redis RUNNING pid 20074, uptime 0:13:25
來(lái)源:http://www.cnblogs.com/sss-justdDoIt/p/5631513.html
supervisor安裝和配置
直接命令 easy_install?supervisor
如果報(bào)錯(cuò)先安裝 yum?install?python-setuptools,再上面一條命令;
安裝成功后顯示finished,我們?cè)俅芜M(jìn)行python環(huán)境,輸入import supervisor ,如果沒(méi)提示錯(cuò)誤則表示安裝成功。
接下來(lái)是對(duì)supervisor配置,首先我們要生成配置文件,在shell終端輸入echo_supervisord_conf > /etc/supervisord.conf
接著編輯配置文件
vi /etc/supervisord.conf
這里,每個(gè)不同的項(xiàng)目,使用了一個(gè)單獨(dú)的配置的文件,放置在?/etc/supervisor/?下面,于是修改?/etc/supervisord.conf?,加上如下內(nèi)容:
[include] files = /etc/supervisor/*.conf修改完后,我們便可以將項(xiàng)目的配置文件命名為 .conf 放置在 /etc/supervisor/ 下面即可。
例如在vi /etc/supervisor/usercenter.conf [program:usercenter] directory?=?/home/leon/projects/usercenter?;?程序的啟動(dòng)目錄 command?=?gunicorn?-c?gunicorn.py?wsgi:app??;?啟動(dòng)命令,可以看出與手動(dòng)在命令行啟動(dòng)的命令是一樣的 autostart?=?true?????;?在?supervisord?啟動(dòng)的時(shí)候也自動(dòng)啟動(dòng) startsecs?=?5????????;?啟動(dòng)?5?秒后沒(méi)有異常退出,就當(dāng)作已經(jīng)正常啟動(dòng)了 autorestart?=?true???;?程序異常退出后自動(dòng)重啟 startretries?=?3?????;?啟動(dòng)失敗自動(dòng)重試次數(shù),默認(rèn)是?3 user?=?leon??????????;?用哪個(gè)用戶啟動(dòng) redirect_stderr?=?true??;?把?stderr?重定向到?stdout,默認(rèn)?false stdout_logfile_maxbytes?=?20MB??;?stdout?日志文件大小,默認(rèn)?50MB stdout_logfile_backups?=?20?????;?stdout?日志文件備份數(shù) ;?stdout?日志文件,需要注意當(dāng)指定目錄不存在時(shí)無(wú)法正常啟動(dòng),所以需要手動(dòng)創(chuàng)建目錄(supervisord?會(huì)自動(dòng)創(chuàng)建日志文件) stdout_logfile?=?/data/logs/usercenter_stdout.log ;?可以通過(guò)?environment?來(lái)添加需要的環(huán)境變量,一種常見(jiàn)的用法是修改?PYTHONPATH ;?environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere
運(yùn)行命令:
?分服務(wù)端supevisord和客戶端supervisorctlsevice supervisord start
執(zhí)行命令supervisorctl,啟動(dòng)supervisorctl,進(jìn)入shell界面
>?status????# 查看程序狀態(tài) >?stop?usercenter???# 關(guān)閉 usercenter 程序 >?start?usercenter??# 啟動(dòng) usercenter 程序 >?restart?usercenter????# 重啟 usercenter 程序 >?reread????#?讀取有更新(增加)的配置文件,不會(huì)啟動(dòng)新添加的程序 >?update????#?重啟配置文件修改過(guò)的程序 >reload ? ? ?如果修改了 /etc/supervisord.conf ,需要執(zhí)行 supervisorctl reload 來(lái)重新加載配置文件,否則不會(huì)生效。。
=============================================
[unix_http_server] file=/tmp/supervisor.sock???;?UNIX?socket?文件,supervisorctl?會(huì)使用 ;chmod=0700?????????????????;?socket?文件的?mode,默認(rèn)是?0700 ;chown=nobody:nogroup???????;?socket?文件的?owner,格式:?uid:gid ;[inet_http_server]?????????;?HTTP?服務(wù)器,提供?web?管理界面 ;port=127.0.0.1:9001????????;?Web?管理后臺(tái)運(yùn)行的?IP?和端口,如果開(kāi)放到公網(wǎng),需要注意安全性 ;username=user??????????????;?登錄管理后臺(tái)的用戶名 ;password=123???????????????;?登錄管理后臺(tái)的密碼 [supervisord] logfile=/tmp/supervisord.log?;?日志文件,默認(rèn)是?$CWD/supervisord.log logfile_maxbytes=50MB????????;?日志文件大小,超出會(huì)?rotate,默認(rèn)?50MB logfile_backups=10???????????;?日志文件保留備份數(shù)量默認(rèn)?10 loglevel=info????????????????;?日志級(jí)別,默認(rèn)?info,其它:?debug,warn,trace pidfile=/tmp/supervisord.pid?;?pid?文件 nodaemon=false???????????????;?是否在前臺(tái)啟動(dòng),默認(rèn)是?false,即以?daemon?的方式啟動(dòng) minfds=1024??????????????????;?可以打開(kāi)的文件描述符的最小值,默認(rèn)?1024 minprocs=200?????????????????;?可以打開(kāi)的進(jìn)程數(shù)的最小值,默認(rèn)?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 ; 通過(guò) UNIX socket 連接 supervisord,路徑與 unix_http_server 部分的 file 一致 ;serverurl=http://127.0.0.1:9001 ; 通過(guò) HTTP 的方式連接 supervisord ;?包含其他的配置文件 [include] files?=?relative/directory/*.ini????;?可以是?*.conf?或?*.ini http://www.ttlsa.com/linux/using-supervisor-control-program/-----挺詳細(xì)的 隨系統(tǒng)啟動(dòng)服務(wù)centos7安裝supervisord
????#yum -y install supervisor
????安裝路徑/usr/bin/supervisord,,配置文件/etc/supervisor.conf
?
一、手動(dòng)啟動(dòng)/關(guān)閉
supervisor手動(dòng)啟動(dòng):
????#/usr/bin/supervisord -c /etc/supervisor.conf
supervisor手動(dòng)關(guān)閉:
????#/usr/bin/supervisorctl stop all????先關(guān)閉supervisor啟動(dòng)腳本,之后再關(guān)閉supervisord服務(wù)
????#kill pid
supervisord開(kāi)機(jī)自啟動(dòng)腳本(各版本系統(tǒng)):https://github.com/Supervisor/initscripts
?
二、添加開(kāi)機(jī)自啟動(dòng)服務(wù):
centos7 開(kāi)機(jī)自啟動(dòng)腳本:
????#vim /lib/systemd/system/supervisord.service
# supervisord service for sysstemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon
[Service]
ExecStart=/usr/bin/supervisord
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s
?
[Install]
WantedBy=multi-user.target
?
這個(gè)自啟動(dòng)腳本需要修改/etc/supervisord.conf配置文件:
????#vim /etc/supervisrod.conf
????????nodaemon=false????改成true
?
或者:#vim /lib/systemd/system/supervisord.service
[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service
?
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
SysVStartPriority=99
?
[Install]
WantedBy=multi-user.target
?
無(wú)需修改/etc/supervisord.conf配置文件
?
兩個(gè)自啟動(dòng)腳本都能夠添加到systemctl自啟動(dòng)服務(wù)
????#systemctl enable supervisord.service
????#systemctl start/restart/stop supervisord.service 可能還需要chkconf supervisord on
總結(jié)
以上是生活随笔為你收集整理的supervisor安装和配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java 高级特性 --- 反射
- 下一篇: Lambda 表达式详解~Streams