【问题标题】:How to subscribe to PROCESS_STATE_RUNNING events for all processes如何为所有进程订阅 PROCESS_STATE_RUNNING 事件
【发布时间】:2013-07-01 21:19:58
【问题描述】:

我正在使用 Supervisor's events framework 订阅由 Supervisor 管理的进程的事件。

我的事件监听器processlistener.py 如下所示:

import sys

from supervisor.childutils import listener

def write_stdout(s):
    sys.stdout.write(s)
    sys.stdout.flush()


def write_stderr(s):
    sys.stderr.write(s)
    sys.stderr.flush()


def main():
    while True:
        headers, body = listener.wait(sys.stdin, sys.stdout)
        body = dict([pair.split(":") for pair in body.split(" ")])

        write_stderr("Headers: %r\n" % repr(headers))
        write_stderr("Body: %r\n" % repr(body))

        if headers["eventname"] == "PROCESS_STATE_RUNNING":
            write_stderr("Process state running...\n")


if __name__ == '__main__':
    main()

在我的supervisord.conf 中,我有:

[program:theprogramname]
command=/bin/cat              ; the program (relative uses PATH, can take args)
process_name=%(program_name)s_%(process_num)s ; process_name expr (default %(program_name)s)
numprocs=1                    ; number of processes copies to start (def 1)

[eventlistener:theeventlistenername]
command=python processlistener.py    ; the program (relative uses PATH, can take args)
process_name=%(program_name)s_%(process_num)s       ; process_name expr (default %(program_name)s)
numprocs=1                           ; number of processes copies to start (def 1)
events=PROCESS_STATE_RUNNING         ; event notif. types to subscribe to (req'd)

使用此配置,我希望只要由 Supervisor 管理的进程进入 RUNNING 状态,我的事件侦听器就会收到通知。然而,这种情况并非如此。当我使用 SIGINT 信号杀死 theprogramname 时,Supervisor 重新启动了该进程,但我的侦听器没有收到此通知。

为了实现我想要的,我是否缺少额外的配置?

【问题讨论】:

    标签: python supervisord


    【解决方案1】:

    这是因为您的侦听器需要在标准输出上将“RESULT 2\nOK”响应发送回 supervisord。

    如果 supervisord 没有看到这个响应,它认为你的监听器还没有准备好,不会再发送任何事件。

    尝试在你的 while 循环中添加这个:

    listener.ok(sys.stdout)
    

    这告诉监听器发送“OK”响应。

    这里是supervisor.childutils.listenerok 方法的来源: https://github.com/Supervisor/supervisor/blob/3.0/supervisor/childutils.py#L61

    【讨论】:

      猜你喜欢
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 2013-11-03
      • 2021-11-21
      • 1970-01-01
      • 2013-11-24
      相关资源
      最近更新 更多