5

我正在尝试为 supervisord 配置一个事件侦听器,但无法使其工作。我只想听 PROCESS_STATE 更改并运行一些触发 urllib2request 的 python 代码。

在我的 .conf 中,我有:

[eventlistener:statechanges]
command=python listener.py
events=PROCESS_STATE

在 listener.py 中:

def run():    
    runFunc() # Function to trigger an urllib2request

if __name__ == '__main__':
    run()

然后触发器不会启动,它只是在重试后进入 FATAL 状态。

statechanges entered FATAL state, too many start retries too quickly

有什么想法或有人有如何为supervisord编写监听器的例子吗?

4

2 回答 2

5

你不能只打印随机字符串,supervisord 在标准输出上监听 :)

文档中的这个例子怎么样:

import sys

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 1:
        write_stdout('READY\n') # transition from ACKNOWLEDGED to READY
        line = sys.stdin.readline()  # read header line from stdin
        write_stderr(line) # print it out to stderr
        headers = dict([ x.split(':') for x in line.split() ])
        data = sys.stdin.read(int(headers['len'])) # read the event payload
        write_stderr(data) # print the event payload to stderr
        write_stdout('RESULT 2\nOK') # transition from READY to ACKNOWLEDGED

if __name__ == '__main__':
    main()
    import sys

http://supervisord.org/events.html#example-event-listener-implementation

于 2013-02-26T09:54:19.890 回答
0

在灰中:

command=sh -c 'echo "READY"; while read -r line; do echo "$line"; supervisorctl shutdown; done'
于 2017-01-27T16:25:29.923 回答