进程管理工具Supervisord
前言
在 web 应用部署到线上后,需要保证应用一直处于运行状态,在遇到程序异常、报错等情况,导致 web 应用终止时,需要保证程序可以立刻重启,继续提供服务。
所以,就需要一个工具,时刻监控 web 应用的运行情况,管理该进程。Supervisor 就是解决这种需求的工具,可以保证程序崩溃后,重新把程序启动起来等功能。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=5user=root ; 用哪个用户启动redirect_stderr=true ; 把 stderr 重定向到 stdout,默认 false; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)stdout_logfile =/data/log/beepkg.logstdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认 50MBstdout_logfile_backups=20 ; stdout 日志文件备份数environment=PATH="/home/app_env/bin" ; 可以通过 environment 来添加需要的环境变量,一种常见的用法是使用指定的 virtualenv 环境
supervisord 管理
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 #根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。