在 web 应用部署到线上后,须要保证应用一直处于运行状态,在遇到程序异常、报错等状况,致使 web 应用终止时,须要保证程序能够马上重启,继续提供服务。
因此,就须要一个工具,时刻监控 web 应用的运行状况,管理该进程。
Supervisor 就是解决这种需求的工具,能够保证程序崩溃后,从新把程序启动起来等功能。python
Supervisor 是一个用 Python 写的进程管理工具,能够很方便的用来在 UNIX-like 系统(不支持 Windows)下启动、重启(自动重启程序)、关闭进程(不单单是 Python 进程)。
# via easy_install $ easy_install supervisor # via pip # yum intall epel-release # yum install python-pip $ pip install supervisor
# 建立配置文件 $ echo_supervisord_conf >> /etc/supervisord.conf # 修改配置 /etc/supervisord.conf [include] files = /etc/supervisord.conf.d/*.conf # 新建管理的应用 $ cd /etc/supervisord.conf.d $ vim beepkg.conf # 配置文件: [program:beepkg] ; 程序名称,在 supervisorctl 中经过这个值来对程序进行一系列的操做 directory=/opt/app/beepkg ; 程序的启动目录 command=/opt/app/beepkg/beepkg ; 启动命令,与手动在命令行启动的命令是同样的 autostart=true ; 在 supervisord 启动的时候也自动启动 autorestart=unexpected ; 程序异常退出后自动重启 startsecs=5 user=root ; 用哪一个用户启动 redirect_stderr=true ; 把 stderr 重定向到 stdout,默认 false ; stdout 日志文件,须要注意当指定目录不存在时没法正常启动,因此须要手动建立目录(supervisord 会自动建立日志文件) stdout_logfile =/data/log/beepkg.log stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认 50MB stdout_logfile_backups=20 ; stdout 日志文件备份数 environment=PATH="/home/app_env/bin" ; 能够经过 environment 来添加须要的环境变量,一种常见的用法是使用指定的 virtualenv 环境
Supervisord 安装完成后有两个可用的命令行 supervisord 和 supervisorctl,命令使用解释以下
$ supervisord -c /etc/supervisord.conf # 初始启动 Supervisord,启动、管理配置中设置的进程。 $ supervisorctl stop beepkg #中止某一个进程(programxxx),programxxx 为 [program:beepkg] 里配置的值,这个示例就是 beepkg。 $ supervisorctl start beepkg #启动某个进程 $ supervisorctl restart beepkg #重启某个进程 $ supervisorctl stop groupworker: #重启全部属于名为 groupworker 这个分组的进程(start,restart 同理) $ supervisorctl stop all #中止所有进程,注:start、restart、stop 都不会载入最新的配置文件。 $ supervisorctl reload #载入最新的配置文件,中止原有进程并按新的配置启动、管理全部进程。 $ supervisorctl update #根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。