Supervisor介绍:
Supervisor 是一个 Python 开发的 client/server 系统,可以管理和监控类 UNIX 操作系统上面的进程。它可以同时启动,关闭多个进程,使用起来特别的方便。
组成部分
supervisord(server 部分):读入配置文件并管理子进程,supervisord会自动将应用程序的进程转为守护进程,这样即使你退出shell也没影响。注意,如果一个进程已经是守护进程了,那用supervisord监控时,会报如下错误,因此用supervisor监控的程序,必须以前台进程的方式启动。
FATAL Exited too quickly (process log may have details)
supervisorctl(client 部分):命令行客户端,用户可以通过它与不同的 supervisord 进程联系,获取子进程的状态,如
supervisorctl reread ; 重载配置文件,并不重启任何进程
supervisorctl reload ; 重新启动supervisord进程
supervisorctl stop(start, restart) xxx,停止(启动,重启)某一个进程(xxx);
supervisorctl update: 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启;
supervisor 的安装
yum install python-pip
easy_install supervisor
安装完成后,会生成三个执行程序:supervisortd、supervisorctl、echo_supervisord_conf,其中echo_supervisor_conf 是生成supervisor 配置文件的进程。
Supervisor 对守护进程的处理
Supervisor只能管理非daemon的进程,也就是说Supervisor不能管理守护进程。否则提示Exited too quickly (process log may have details)异常。因此我们需要将一些daemon进程运行的程序,进行一下处理。
- tomcat 的处理:
/opt/tomcat/bin/catalina.sh run
- Nginx 处理:
增加 daemon off 至nginx.conf 的全局配置项中
配置管理项,修改 supervisord.conf 文件
在conf文件的最后,添加如下内容
[program:nginx]
command=/usr/sbin/nginx -c /etc/nginx/nginx.conf
numprocs=1
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisor-nginx.log
stderr_logfile=/var/log/supervisor-nginx.err
loglevel=info
以上内容只介绍了管理一个nginx进程的情况,如果是多个进程,建议Include 进来,进行分类配置,具体可以参看 supervisord.conf 文件中
;[include]
;files = relative/directory/*.ini
针对以上进行修改,指定一个放配置文件的目录。