使用Supervisor进行监控进程并实现自动重启

1.什么是进程守护系统?  

  进程守护系统,用于监控指定的进程,当发现目标进程不再正常工作时,就关闭该进程,并重启它。

  在什么情况下使用进程守护系统了?比如说,我们的某个服务器软件,在上线后出现一个严重的bug,该bug虽然很难出现,但是只要一出现,整个服务都会停掉(进程没有崩溃,只是不再提供服务)。此时,重启服务软件,又会开始正常工作。

  对于这样严重的bug,必须要查清楚并解决掉的。但是,基于以下两个原因:

  • 系统已经对用户开放,服务不能停。不可能说系统先下线,直到bug被解决掉后再重新上线。
  • bug很难重现,可能需要加日志,不断地跟踪排查,这很可能是一场持久战。

   为了让系统继续线上运行,在bug解决之前,必须要保证系统停止服务之后,能迅速重新启动恢复服务。此时,使用进程守护系统是最恰当不过的了。

   Supervisor就是为达到这一目的,实现了一个进程守护系统。一个守护者程序,可以守护同一台机器上的多个进程。Supervisor是一个基于Python开发的Linux系统上的进程监控工具。可以很方便的监听、启动、停止和重启一个或多个进程。通过 Supervisor 管理的进程,当进程意外被 Kill 时,Supervisor 会自动将它重启,可以很方便地做到进程自动恢复的目的,而无需自己编写 shell 脚本来管理进程。

 2.进程守护系统的实现及使用

   Supervisor守护者对被守护进程的管理使用的是心跳机制,其原理描述如下:

  1. 被守护进程定时向守护者报告(发送心跳),以表明自己是在正常提供服务。
  2. 如果守护者发现某个被守护进程连续一段时间都没有心跳过来,就关闭对应的进程,然后再启动对应的程序。

        在supervisor的配置⽂件中,把要管理的进程的可执行文件的路径写进去,通过配置command这个参数,把这些被管理的进程当作supervisor的子进程来启动,获取到该进程的pid,然后再对该pid进行监控,当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息,可以选择是否⾃⼰启动和报警。

3. 安装配置Supervisor

#Ubuntu安装Supervisor
apt install -y supervisor
#supervisor开机自启:
systemctl enable supervisor
# 开始运行
systemctl start supervisor
# 查看supervisord服务状态
systemctl status supervisord 
# 查看是否存在supervisord进程
ps -aux|grep supervisord    

编辑配置文件
vim /etc/supervisord.conf,增加如下内容,以方便使用web页面查看被守护进程的信息及操作。

[inet_http_server]        #HTTP服务器,提供web管理界面
port=0.0.0.0:9001         #Web管理后台运行的IP和端口,云服务器注意开放该端口
username=admin            #登录管理后台的用户名
password=admin            #登录管理后台的密码

添加一个被守护进程的配置文件

#以test为例
cd /etc/supervisor/conf.d/
#创建开机启动脚本配置文件
touch test.conf
#编辑/etc/supervisor/conf.d/test.conf
vim /etc/supervisor/conf.d/test.conf

内如如下:

[program:api]
#执行文件的路径
directory=/home/ok/test/
#执行的命令
command=bash test.sh
#随supervisor启动
autostart = true
#启动10秒后没有异常退出,就表示进程正常启动
startsecs = 10
#程序退出后自动重启
autorestart = true
#启动失败自动重试次数
startretries = 2
#执行命令的用户
user = ok
#用来杀死进程的信号
stopsignal=KILL               
#日志路径
stdout_logfile=/home/ok/test/tornado_16018.log

因为supervisor已经被设置成了开机自启动,而这里,我们又设置了test.sh随着supervisor而自启动。test.sh的内容如下:

#!/bin/bash
#echo "hello world"
sleep 10
cd /home/ok/test/
./a.out
#也可以是./a.out &

其中a.out是我们写的测试程序,主要是测试stl的map的插入与查询功能;

验证

重启电脑后,使用web页面查看守护进程工作情况。浏览器访问IP地址端口

http://0.0.0.0:9001

在这里插入图片描述
已经开始运行并监控,如果进程挂掉将重启,但是supervisor不支持跨机器的进程监控,一个supervisord只能监控本机上的程序,大大限制了supervisor的使用。

 查看pstree,supvervisor确实是1号进程的子进程。

 我们使用kill -9 pid的方式杀掉a.out后,supervisor确实会再启动一个a.out,这可以可以通过日志查看。

 这里面,supervisor首页显示的pid实际是test.sh对应的进程id,而日志里面的是a.out对应的进程id。

通过上述测试过程,我们发现,supervisor除了可以监控进程外,其实还可以把某个程序设置为开机启动。

注意,这里面如果要求用户的程序在全局只能有1份同时在运行,那么脚本里面还需要增加其他的内容,例如判断当前进程列表里面是否已经存在该进程,如果存在,则不再启动,否则则启动。相关内容可以参考:linux 进程(关于守护进程、检查一个进程是否活着、如何写一个进程号文件)_andylauren的博客-CSDN博客

有了supervisor之后我们可以直接借助它来实现我们的守护进程,而不用再像创建守护进程为什么要fork两次_TerryZjl的博客-CSDN博客_守护进程fork两次介绍的那样来回折腾。
参考链接:https://blog.csdn.net/weixin_46415378/article/details/124229507

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Supervisor是一个用于管理和监控进程的工具,可以确保进程始终处于运行状态。以下是使用Supervisor的基本教程: 1. 安装Supervisor:首先,你需要在你的系统中安装Supervisor。具体安装步骤因操作系统而异。你可以通过包管理器(如apt、yum或brew)来安装Supervisor。 2. 配置SupervisorSupervisor的配置文件位于/etc/supervisor/supervisord.conf。你可以通过编辑此文件来配置需要监控进程。 3. 添加进程配置:在配置文件中,你可以为每个要监控进程添加一个节(section)。以下是一个示例: ``` [program:myprocess] command=/path/to/your/process directory=/path/to/working/directory autostart=true autorestart=true user=user_name ``` 在上面的示例中,你需要将`/path/to/your/process`替换为要监控进程的实际路径。`directory`是进程运行时的工作目录。`autostart`和`autorestart`选项用于定义进程自动启动和自动重启的行为。`user`选项指定以哪个用户身份运行该进程。 4. 保存并重启Supervisor:保存Supervisor配置文件后,重新启动Supervisor以使更改生效。可以使用以下命令重启Supervisor: ``` sudo service supervisor restart ``` 5. 管理进程:一旦Supervisor启动,它将开始监控配置文件中指定的进程。你可以使用以下命令管理进程(以示例中的myprocess为例): ``` sudo supervisorctl start myprocess # 启动进程 sudo supervisorctl stop myprocess # 停止进程 sudo supervisorctl restart myprocess # 重启进程 ``` 这是一个Supervisor的基本教程,希望能对你有所帮助。如需了解更多信息,可以参考Supervisor的官方文档或其他相关资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值