用supervisor监管你的程序,不用担心程序挂了

1.背景

无论多么优秀的程序员都难以避免写出来的程序会有崩溃的一天,特别是c、c++这种高技术含量的语言,一不小心就来个段错误(segment fault),我们通常会写一个守护进程或者守护脚本,检测对应的进程是否退出,如果发现目标进程退出了,就马上在fork或者启动一个新的,这样的检测逻辑不复杂,简单几行代码即可,但是如果你要检查的程序有很多个,用不同的语言编写等等,就比较繁琐了。

2.supervisor安装

今天给大家介绍的这个工具叫supervisor,看名字就知道是一个专门给管理员用的,这个工具非常强大,今天我们只做一个简单而实用的介绍,就是实现用supervisor监管你的程序服务,当程序服务异常退出了,它帮你自动再开启一个新的。

#supervisor的安装很简单,我们这里以Ubuntu16为例

#apt一下即可,别忘了安装之前要update一下

apt install -y supervisor


#一切顺利之后,你会看到supervisor的服务和对应配置文件信息

service supervisor status

ls /etc/supervisor/

3.supervisor实战

我们以一个python服务为例子,先看看这个例子的代码如下

#!/usr/bin/env python

# test.py

# 如果还没装webpy的,先去webpy官网看安装教程,比较简单

# http://webpy.org/

import web

urls = (

    '/', 'index'

)

class index:

    def GET(self):

        return "Hello, world!"

if __name__ == "__main__":

    app = web.application(urls, globals())

    app.run()

这是一个用python webpy框架做的一个简单的http服务程序,监听了8080端口提供http服务,使用命令 python test.py 运行即可。

下面我们开始配置supervisor,监控上面我们做的这个简单的程序服务 test.py。在supervisor的配置目录 /etc/supervisor/conf.d 下面创建一个 test_python.conf 的文件。/etc/supervisor/conf.d 这个目录是supervisor用来给配置不同监管用的配置文件夹,supervisor服务会包含这个目录下面所有的conf配置文件,并识别里面的内容对其进程服务进行监管。下面我们看看我们这个 test_python.conf配置内容如下

#监控服务名称,这个自己起一个名字即可

[program:test_python]

#指定进程的目录,这里我们是在/tmp创建的,为了演示

directory = /tmp

#程序启动参数,这个比较简单,用python运行

command = python test.py

#是否跟随supervisord的启动而启动,我们设置了true是

autostart=true

#程序退出后自动重启,选择true是

autorestart=true

#进程被杀死时,是否向这个进程组发送stop信号,包括子进程,选择true是

stopasgroup=true

#向进程组发送kill信号,包括子进程,选择true是

killasgroup=true

#下面这几行是日志文件和日志大小和备份个数

stdout_logfile=/var/log/test_python.log

stdout_logfile_maxbytes = 50MB

stdout_logfile_backups  = 10

配置内容比较简单明了,配置完之后,我们重启一下supervisor服务,service supervisor restart,一切顺利之后再用 service supervisor status看看服务运行状态。当supervisor服务重启后,它会发现 test.py 进程没有起来,然后就开启了 test.py 进程。

ps -ef|grep-v grep|grep test.py

root     27314 27284  0 10:10 ?        00:00:00 python test.py


#把进程kill掉,模拟进程崩溃退出

kill -9 27314

#再看看程序有没有被重新开起来


ps -ef|grep -v grep|grep test.py

root     27483 27284  4 10:45 ?        00:00:00 python test.py


#可以看到进程号已经变了是 27483,证明程序是新启动不是旧的

在这里插入图片描述
睿江云官网链接:https://www.eflycloud.com/home?from=RJ0036

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值