supervisord event listener

给你一囗甜甜゛ 提交于 2019-12-10 14:18:38

问题


I'm trying to configure an event listener for supervisord but can't get it to work. I just want to listen for PROCESS_STATE changes and run some python code triggering an urllib2request.

In my .conf I have:

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

And in listener.py:

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

if __name__ == '__main__':
    run()

Then the trigger won't start, it just enters the FATAL state after some retries.

statechanges entered FATAL state, too many start retries too quickly

Any ideas or does someone have an example of how to write a listener for supervisord?


回答1:


You can't just print random strings, supervisord listens at the stdout :)

How about this example from the docs:

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




回答2:


In ash:

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


来源:https://stackoverflow.com/questions/15085623/supervisord-event-listener

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!