Supervisord事件监听器

6

我正在尝试为supervisord配置事件监听器,但无法使其正常工作。我只是想监听PROCESS_STATE的变化并运行一些Python代码触发一个urllib2请求。

在我的.conf文件中,我有以下内容:

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

在listener.py中:

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

if __name__ == '__main__':
    run()

然后触发器无法启动,经过一些重试后,只会进入致命状态。

statechanges entered FATAL state, too many start retries too quickly

有没有什么想法或者有人能提供一个如何为supervisord编写监听器的示例?
2个回答

6

你不能随意打印任意字符串,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


好的,我已经用urllib2request替换了print,并向指定的url发送了请求。现在触发器进入了FATAL状态,但仍然成功发送了一些请求。 - Carl

0

在灰烬中:

command=sh -c 'echo "READY"; while read -r line; do echo "$line"; supervisorctl shutdown; done'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接