1.Supervisor 介绍
Supervisor 是用 Python 开发的一个 client/se Linux/Unix 系统下的一个进程管理工具, 不支持 Windows 系统. 它可以很方便的监听, 启动, 停止, 重启一个或多个进程. 用 Supervisor 管理的进程, 当一个进程意外被杀死, supervisort 监听到进程死后, 会自动将它重新拉起, 很方便的做到进程自动恢复的功能, 不再需要自己写 shell 脚本来控制.
这个工具主要就两个命令:
supervisord : supervisor 的服务器端部分, 启动 supervisor 就是运行这个命令
supervisorctl: 启动 supervisor 的命令行窗口.
2. 安装
centos 平台可以直接使用 yum 源安装
yum install supervisor
添加服务自启动
chkconfig supervisord on
3. 服务器启停
/etc/init.d/supervisord {start|stop|status|restart|reload|force-reload|condrestart}
4. 主配置文件
vim /etc/supervisord.conf
包含如下几个可配置部分
- [unix_http_server]
- [inet_http_server]
- [supervisord]
- [supervisorctl]
- [program:x]
- [include]
- [group:x]
- [fcgi-program:x]
- [eventlistener:x]
- [rpcinterface:x]
需要重点关注的是以下两部分
[program:x] 中配置要监控的进程
[group:x] 将要监控的进程分组
这里列出常用的参数解释:
[unix_http_server]
file=/tmp/supervisor.sock ;UNIX socket 文件, supervisorctl 会使用
;chmod=0700 ;socket 文件的 mode, 默认是 0700
;chown=nobody:nogroup ;socket 文件的 owner, 格式: uid:gid
;[inet_http_server] ;HTTP 服务器, 提供 web 管理界面
;port=127.0.0.1:9001 ;Web 管理后台运行的 IP 和端口, 如果开放到公网, 需要注意安全性
;username=user ; 登录管理后台的用户名
;password=123 ; 登录管理后台的密码
[supervisord]
logfile=/tmp/supervisord.log ; 日志文件, 默认是 $CWD/supervisord.log
logfile_maxbytes=50MB ; 日志文件大小, 超出会 rotate, 默认 50MB, 如果设成 0, 表示不限制大小
logfile_backups=10 ; 日志文件保留备份数量默认 10, 设为 0 表示不备份
loglevel=info ; 日志级别, 默认 info, 其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false ; 是否在前台启动, 默认是 false, 即以 daemon 的方式启动
minfds=1024 ; 可以打开的文件描述符的最小值, 默认 1024
minprocs=200 ; 可以打开的进程数的最小值, 默认 200
- [supervisorctl]
- serverurl=unix:///tmp/supervisor.sock ; 通过 UNIX socket 连接 supervisord, 路径与 unix_http_server 部分的 file 一致
一般使用是将管理的程序的配置文件写在子文件夹中, 字文件夹中写你需要具体管理的程序的配置信息
包含其它配置文件
[include]
files = /etc/supervisord.d/*.ini; 可以指定一个或多个以. ini 结束的配置文件
5. 子配置文件 (具体服务管理的文件)
- cd /etc/supervisord.d/
- #program: 后面写的是管理的服务的名称
- [program:saas-tomcat]
- # 启动的命令
- command=/usr/local/apache-tomcat-7.0.64/bin/catalina.sh run
- #supervisord 的环境变量
- environment=JAVA_HOME="/usr/local/jdk/",JAVA_BIN="/usr/local/jdk/bin"
- # 是否有多进程, 有多进程, 需要额外添加一个参数去定义, 为 1 是没有多进程
- numprocs=1
- # 发送停止的信号
- stopsignal=INT
- # 程序的目录
- directory=/usr/local/apache-tomcat-7.0.64/
- # 用户
- user=www-data
- # 是否重定向错误输出到 stdout, 一般会配置此项目, 这样当查看程序日志的时候就不需要看两个日志文件, 只需要看一个日志即可
- redirect_stderr=true
- # 服务日志存放的路径
- stdout_logfile=/data/log/tomcat/catalina-supervisor.out
- # 日志大小限制, 为 0 代表不限制可以无限增长
- stdout_logfile_maxbytes=0
- # 备份 30 天的日志,
- stdout_logfile_backups=30
- # 当服务停止的时候要不要停止所管理的服务, 下面两个都是这个意思
- stopasgroup=true
- killasgroup=true
注意: 上面的日志是无限增长的, 不会切割, 代表日志会一直变大, 而且会放在一个文件中, 所以一般会结合 logrotate, 对日志每天进行切割
下面贴上 logrotate 的配置:
- cat /etc/logrotate.d/tomcat
- /data/log/tomcat/*.out {
- daily #每天进行切割
- compress #是否采用 gzip 进行压缩
- copytruncate #用于还在打开中的日志文件, 把当前日志备份并截断; 是先拷贝再清空的方式, 拷贝和清空之间有一个时间差, 可能会丢失部分日志数据
- notifempty #当日志文件为空时, 不进行轮转
- rotate 15 #保留 15 天的日志
- missingok # 表示如果找不到 log 文件也 OK
- }
6, 日常运维命令
配置文件更改之后, 需要执行这个命令才能生效
supervisorctl update
查看服务的状态
supervisorctl status
启动停止服务的命令
supervisorctl (start|stop|restart)
来源: http://www.bubuko.com/infodetail-2718994.html