背景:
应用在运行过程中避免不了进程出现一些情况挂掉,导致服务不可用,影响业务功能;因此,我们希望当应用进程挂掉的时候,能自动的重启应用。
supervisor是什么?
supervisor是用Python语言开发的一个client/server服务,是Linux/unix系统下的一个进程管理工具。它是可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它拉起来,很方便的做到进程自动恢复的功能。
supervisor安装:
1、Linux版本:
2、安装命令:
[root@localhost /]# yum install epel-release
[root@localhost /]# yum install -y supervisor
[root@localhost /]# systemctl enable supervisord # 开机自启动
[root@localhost /]# systemctl start supervisord # 启动supervisord服务
[root@localhost /]# systemctl status supervisord # 查看supervisord服务状态
[root@localhost /]# ps -ef|grep supervisord # 查看是否存在supervisord进程
3、安装成功后,在/etc下面有一个目录/supervisord.d;
4、有一个主配置文件supervisord.conf,supervisor监控多个不同的应用,为了方便统一管理,在/etc/supervisord.d/conf/下面配置每一个应用的配置文件;
supervisord.conf配置:
5、在/etc/supervisord.d/conf建立java应用配置文件,起名为springboot.hook.conf,配置内容如下所示:
[program:springboot-hook-0.0.1-SNAPSHOT] ;程序名称,终端控制时需要的标识
command=/usr/bin/java -jar springboot-hook-0.0.1-SNAPSHOT.jar > hook.log & ; 运行程序的命令
directory=/usr/local/data/ ; 命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
stdout_logfile=/usr/local/data/hook.log; 输出日志文件
environment==MALLOC_ARENA_MAX="1" ; 进程环境变量
user=wangtk ; 进程执行的用户身份
6、上传java应用包到指定配置目录,这个路径取决于springboot.hook.conf配置文件。
supervisor验证:
1、查看当前java进程是否已启动;
2、启动supervisor服务,[root@localhost conf]# systemctl start supervisord.service,通过status查看supervisor服务状态已启动;
3、supervisor启动成功后查看java应用是否也启动;命令查看发现已有java应用已被supervisor管理;查看java启动日志也正常;
4、supervisor也提供了web端对进程进行管理,在浏览器登录http://172.16.205.128:9901,这里的端口和登陆的用户名密码配置在supervisord.conf文件,如果遇到无法访问此网站,在确保supervisor服务已正常启动后,检查一下服务器的防火墙是否已关闭;
5、登陆成功后,在页面上可以看到已有一个java应用被supervisor管理,此时的状态是running;
6、在web页面上,可以对应用进行重启、关闭应用,同时也可以进程在线的tail -f查看应用日志。
服务挂掉后,supervisor是否会自动拉起?
手动的把java应用kill掉,观察supervisor是否会自动把java服务拉起来;
1、查看java进程pid;
2、在步骤1kill 掉java进程,在步骤2查看java应用已经不存在,第3步查看发现java应用已被supervisor自动拉起来;
3、查看java日志,服务已正常启动。
结论:
1、确保supervisord.conf与应用配置文件springboot.hook.conf配置正确;
2、在supervisor启动后,可以查看到被supervisor管理的配置文件应用启动成功;
3、当应用挂掉后,supervisor也能自动拉起java应用,保证服务正常运行。