прослушиватель событий супервизора

Я пытаюсь настроить прослушиватель событий для supervisord, но не могу заставить его работать. Я просто хочу прослушать изменения PROCESS_STATE и запустить некоторый код Python, запускающий urllib2request.

В моем .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

Любые идеи или у кого-то есть пример того, как написать слушателя для супервизора?


person Carl    schedule 26.02.2013    source источник


Ответы (2)


Вы не можете просто печатать случайные строки, супервизор прослушивает стандартный вывод :)

Как насчет этого примера из документации:

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

person Wolph    schedule 26.02.2013
comment
Хорошо, я заменил печать на urllib2request по указанному URL-адресу. Теперь триггер переходит в состояние FATAL, но успевает сначала отправить несколько запросов. - person Carl; 26.02.2013

В пепле:

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