参考:http://www.ttlsa.com/linux/using-supervisor-control-program/
Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。
而我打算用这个软件实现进程的守护管理。
通常我的业务系统都是CENTOS6,YUM源的Supervisor版本有点老,网上有些配置是基于其他系统的3.0以上版本,所以你在2.0下配置没有毛用。
于是我就上官网找了一般最新版本的。咳咳。
wget -c https://pypi.python.org/packages/80/37/964c0d53cbd328796b1aeb7abea4c0f7b0e8c7197ea9b0b9967b7d004def/supervisor-3.3.1.tar.gz
[root@web_1supervisor-3.3.1]# python setup.py install
Traceback (most recent call last): File "setup.py", line 32, in <module> from setuptools import setup, find_packages ImportError: No module named setuptools还好我不是厦大的,拿出EVERYTHING神奇搜索以前总结的文件,啊哈
yum install python-pip -y 快速便捷!
接下来就可以安装了 python setup.py install
一共有3个命令 supervisor supervisorctl supervisord
查看帮助 supervisord -h 使用 “echo_supervisord_conf” 命令来生成样例配置文件 echo_supervisord_conf //就显示配置文件模版 echo_supervisord_conf > /etc/supervisord.conf //创建配置文件全部的配置文件都写一个文件显得不太科学
mkdir -p /etc/supervisord.d
在配置文件写个include
[include]
files = /etc/supervisord.d/*.ini现在写一个例子:( /etc/supervisord.d/test.ini)
[program:test]
directory = /data/web/test ; 程序的启动目录 command = /usr/bin/php test.php ; 启动命令,没错!我就是要跑PHP进程啊哈。 autostart = true ; 在 supervisord 启动的时候也自动启动 startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了,默认10秒 autorestart = true ; 程序异常退出后自动重启 startretries = 3 ; 启动失败自动重试次数,默认是 3 user = www ; 用哪个用户启动 redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数 ; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件) stdout_logfile = /data/logs/supervisord/test.logOK,还需要建立一个存放日志的统一目录
mkdir -p /data/logs/supervisord/
写完,启动就行了,supervisord -c /etc/supervisord.conf
嗯。。把YUM的启动脚本拿过来做启动脚本,哈哈,只需要修改启动指定配置文件就可以用了~
哦,对,它有一个客户端 supervisorctl,输入命令后进入
supervisor> status //在另外终端杀掉进程
test RUNNING pid 26375, uptime 0:00:25 supervisor> status //启动进程中 test STARTING supervisor> status //进程被重启了 test RUNNING pid 26379, uptime 0:00:08也可以在BASH直接执行
$ supervisorctl status
$ supervisorctl stop test $ supervisorctl start test $ supervisorctl restart test $ supervisorctl reread $ supervisorctl update-。- 好吧,它还有WEB接口 WEB UI,并可以认证
接口
远程管理
supervisorctl -s http://127.0.0.1:9001-u abc -p 123 status testWEB界面
[inet_http_server] ; inet (TCP) server disabled by default
port=*:9001 ; (ip_address:port specifier, *:port for all iface) username=abc ; (default is no username (open server)) password=123 ; (default is no password (open server))[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket username=abc ; should be same as http_username if set password=123 ; should be same as http_password if set prompt=mysupervisor ; cmd line prompt (default "supervisor") history_file=~/.sc_history ; use readline history if available没有了。