使用supervisor监控服务器持续运行的文件

Posted liudamu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用supervisor监控服务器持续运行的文件相关的知识,希望对你有一定的参考价值。

在做数据传输的时候需要让python脚本不断运行,如果脚本突然中断而来不及造成的影响很不好。虽然可以在每个脚本中加上try..catch,但这样代码重复,维护起来挺费劲。本人也尝试使用python的subprocess来管理,但subprocess只能做到发现脚本中断后立即重启,而不能人为手动重启(有时候中断是因为出现exception,需要排查)。后来发现supervisor可以使用,就尝试安装supervisor来用一下。

安装文档很容易搜到,最主要是supervisor只能由python2来安装,需要找到服务器中的python2文件来安装。

配置方案也比较容易,有个细节就是所有的配置语句后面不能紧挨着分号‘;‘,需要留一点空,否则会出现异常。

supervisor提供了web界面查看正在管理的脚本,可以从界面查看脚本启动重启等等。

最后supervisor提供了监听事件功能,主要建立监听配置,当监听到脚本中断退出的事件,把事件信息传输给自建的python脚本进行处理。例如本人自建的python脚本代码如下:

    if not SUPERVISOR_SERVER_URL in os.environ:
        print("%s must be run as a supervisor listener." % sys.argv[0])
        return
    while True:
        # echo ‘READY‘ and wait for event for stdin.
        write_stdout(READY
)
        line = sys.stdin.readline()  # read header line from stdin
        headers = dict([x.split(:) for x in line.split()])
        data = sys.stdin.read(int(headers[len]))  # read the event payload
        # write_stdout(‘事件名:‘+headers[‘eventname‘]+‘
‘)
        if headers[eventname] == PROCESS_STATE_EXITED:
            pheaders, pdata = parseData(data)
            process_name = pheaders[processname]
            msg = 进程%s(PID: %s)异常退出,请检查进程状态.                   % (process_name, pheaders[pid])
            smtp = mail_config()
            msg = "<p>错误原因:</p><b>" + msg + "</b>"
            message = MIMEText(msg, html, utf-8)
            message[From] = Header("supervisor监控脚本", utf-8)  # 发送者
            message[To] = Header("开发成员", utf-8)  # 接收者
            subject = supervisor监控异常
            message[Subject] = Header(subject, utf-8)
            smtp.sendmail([email protected], [email protected], message.as_string())
        write_stdout(RESULT 2
OK)  # transition from READY to ACKNOWLEDGED
    pass

代码中的write_stdout(READY )write_stdout(RESULT 2 OK‘)都是一个信息标准的头尾,这里的代码是当捕捉到退出事件,把异常信息获取,并发送邮件给运维。运维就会根据错误日志排查错误,当排查完错误后在管理界面重新启动脚本即可。

以上是关于使用supervisor监控服务器持续运行的文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Supervisor 配置 Laravel 运行队列处理器

使用 Supervisor 配置 Laravel 运行队列处理器

supervisor监控服务

利用superlance监控supervisor运行状态

利用superlance监控supervisor运行状态

使用Supervisor 管理服务