Supervisor 是一個(gè) CS 模式系統(tǒng),,允許用戶在類 UNIX 系統(tǒng)上監(jiān)測(cè)和管理一定數(shù)量的進(jìn)程,還支持 Web 界面管理進(jìn)程,。它的目標(biāo)與 launchd, daemontools 和runit 有些相似, 但是與它們不一樣的是, 它不是作為 init (進(jìn)程號(hào)pid是1)運(yùn)行. 它是被用來控制進(jìn)程, 并且它在啟動(dòng)的時(shí)候和一般程序并無二致,。
supervisord 還要求管理的程序是非 daemon 程序,supervisord 會(huì)幫你把它轉(zhuǎn)成 daemon 程序, Monit 和 Supervisord 的一個(gè)比較大的差異是 Supervisord 管理的進(jìn)程必須由 Supervisord來啟動(dòng),,Monit 可以管理已經(jīng)在運(yùn)行的程序
一,、安裝 Supervisor
Supervisor 是由 python 編寫的,先安裝 python 和 pip (python 包管理工具)
yum install epel* python python-pip -y
用 pip 安裝 supervisor
pip install supervisor
安裝后,,會(huì)出現(xiàn)2個(gè)可執(zhí)行文件:
/usr/bin/supervisord -- supervisor 服務(wù)守護(hù)進(jìn)程
/usr/bin/supervisorctl -- supervisor 控制臺(tái)進(jìn)程
生成默認(rèn)配置文件
echo_supervisord_conf > /etc/supervisord.conf
二,、配置 Supervisor
這里以 Nginx 為例介紹怎么管理應(yīng)用進(jìn)程
1、安裝 nginx
yum -y install nginx # 安裝 nginx
設(shè)置 nginx 不以后臺(tái)模式運(yùn)行
sed -i.bak '/worker_processes/a daemon off;' /etc/nginx/nginx.conf
2,、設(shè)置 supervisord
主要通過修改其主配置文件實(shí)現(xiàn)
vim /etc/supervisord.conf
[inet_http_server] ; 開啟TCP/IP http 服務(wù)器 port=192.168.18.10:9001 ; 偵聽端口 username=user ; 認(rèn)證用戶名 password=123 ; 密碼 [supervisord] logfile=/tmp/supervisord.log ; 日志輸出文件 logfile_maxbytes=50MB ; 日志最大空間 logfile_backups=10 ; 日志輪轉(zhuǎn)保留數(shù) loglevel=info ; (日志等級(jí); default info; others: debug,warn,trace) pidfile=/tmp/supervisord.pid ; (pid文件; default supervisord.pid) nodaemon=false ; (前臺(tái)運(yùn)行 ;default false) minfds=1024 ; (最小文件描述符數(shù) ;default 1024) minprocs=200 ; (最小進(jìn)程數(shù) ;default 200) [rpcinterface:supervisor] ; rpc 接口 supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] ; 控制臺(tái)設(shè)置 erverurl=unix:///tmp/supervisor.sock ; socket 訪問路徑 serverurl=http://192.168.18.10:9001 ; URL 訪問路徑 username=user ; 使用的認(rèn)證用戶名 (上同) password=123 ; 密碼 prompt=mysupervisor ; cmd line prompt (default "supervisor") history_file=~/.sc_history ; use readline history if available [program:nginx] command=/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf ; 程序路徑 directory=/tmp ; 切換到目錄 user=www-data ; 執(zhí)行程序的用戶 autorestart=true ; 自動(dòng)重啟 priority=999 ; 優(yōu)先級(jí) startsecs=1 ; 重啟前等待時(shí)間 startretries=100 ; 最大重啟次數(shù) stdout_logfile=/tmp/supervisor/nginx/nginx.log ; 日志文件 stdout_logfile_maxbytes=10MB ; 日志文件最大容量 stderr_logfile=/tmp/supervisor/nginx/nginx_err.log ; 錯(cuò)誤日志文件 stderr_logfile_maxbytes=1MB ; 錯(cuò)誤日志文件最大容量
創(chuàng)建日志目錄,,設(shè)置權(quán)限
mkdir -p /tmp/supervisor/nginx/ chown -R nginx:nginx /tmp/supervisor/nginx/
啟動(dòng) supervisord 的后臺(tái)進(jìn)程:
supervisord -c /etc/supervisord.conf
加入開機(jī)啟動(dòng)項(xiàng)
echo "supervisord -c /etc/supervisord.conf" >> /etc/rc.local
防火墻上放行 Web 端口
iptables -I INPUT -m state --state NEW -p tcp --dport 9001 -j ACCEPT service iptables save
三、管理界面介紹
supervisorctl start nginx # 啟動(dòng) nginx supervisorctl start all # 啟動(dòng)所有進(jìn)程 supervisorctl status # 查看進(jìn)程狀態(tài)
也可使用交互模式管理進(jìn)程:
supervisorctl nginx RUNNING pid 4883, uptime 0:02:03 mysupervisor> mysupervisor> help default commands (type help <topic>): ===================================== add clear fg open quit remove restart start stop update avail exit maintail pid reload reread shutdown status tail version
還可使用 Web 管理界面
測(cè)試:
lsof -i:80 # 查看到此時(shí)的 PID 為 1677 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 1677 root 6u IPv4 29067 0t0 TCP *:http (LISTEN) nginx 1678 nginx 6u IPv4 29067 0t0 TCP *:http (LISTEN) [root@Srv-A meld3-1.0.2]# killall nginx #關(guān)閉所有 nginx 進(jìn)程: [root@Srv-A meld3-1.0.2]# lsof -i:80 # 此時(shí),,已經(jīng)生成了新的 PID 1681
Debug:
生成配置文件時(shí)
supervisord -c /etc/supervisord.conf
出現(xiàn):
Traceback (most recent call last): File "/usr/bin/echo_supervisord_conf", line 5, in <module> from pkg_resources import load_entry_point File "/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg/pkg_resources.py", line 2603, in <module> File "/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg/pkg_resources.py", line 666, in require File "/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg/pkg_resources.py", line 565, in resolve pkg_resources.DistributionNotFound: meld3>=0.6.5
解決方法:pip安裝的meld3不可用,,手動(dòng)安裝。
wget https://pypi.python.org/packages/source/m/meld3/meld3-1.0.2.tar.gz tar -zxf meld3-1.0.2.tar.gz cd meld3-1.0.2 python setup.py install
http://supervisord.org/installing.html
轉(zhuǎn)載來源:http://www.cnblogs.com/hubery/p/5653007.html