用在可视化进程管理上,作为一个运维工具可以在web页面上查看程序日志、重启程序,并监控状态。
应用场景分析:
开发过程中经常涉及到程序的排错、重启。 重启会在持续集成做,但是需要写脚本,如果基于docker的,通常会:
docker rm -f xxx
docker run ...
如果是在宿主机上可能就要 ps -ef
来查询active的进程了,查到后kill然后再启动新进程。通常这需要给应用写一个类似start.sh
的启动脚本, 我认为supervisor主要解决了
这个启动脚本的问题,可以通过配置来代替这个启动脚本,对于查看日志,通常需要登陆到服务器再找对应的日志文件,supervisor可以在网页中查看日志(tail -f )。
一旦在开发过程中使用了,在生产环境中也需要使用,因为程序的启动方式由supervisor控制了。如果一个系统服务比较多(3个以上),
并且仅需要一个轻量级的进程监控那supervisor是一个选择。
它是一个python程序,可以使用pip安装:
pip install supervisor
生成配置文件:
echo_supervisord_conf > ./supervisord.conf
修改配置文件,打开http服务:
[inet_http_server] ; inet (TCP) server disabled by default
port=*:9001 ; ip_address:port specifier, *:port for all iface
username=user ; default is no username (open server)
password=123 ; default is no password (open server)
另外可以把关于应用程序的配置独立出去,然后用include指令加载进来:
[include]
files = /etc/supervisor/supervisor.conf # 加载应用的配置文件
在/etc/supervisor/supervisor.conf
中配置:
[program:cooka-backend] ; 应用的名称
directory = /tmp/mysql ; 启用启动时候的路径
command = /start_myqsl.sh ; 启动命令,改命令要是阻塞的,如果是多个命令,最好放到一个脚本中
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = wuhf ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
stdout_logfile = /start_myqsl.log ; 程序日志
启动服务:
supervisord -c ./supervisord.conf
此时可以到http://localhost:9001上查看进程的状态了。
也可以使用命令行工具管理进程,比如要重启 tomcat:
supervisorctl restart tomcat