supervisor实践

用在可视化进程管理上,作为一个运维工具可以在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
posted @ 2020-11-12 13:43  oaksharks  阅读(157)  评论(0编辑  收藏  举报