2013-02-26 210 views
3

我試圖爲supervisord配置一個事件監聽器,但無法讓它工作。 我只想監聽PROCESS_STATE更改並運行一些觸發urllib2request的python代碼。supervisord事件監聽器

在我的.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編寫監聽器的例子嗎?

回答

3

你不能只打印隨機字符串,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

+0

好吧,我已經用urllib2request將打印替換爲指定的url。現在觸發器進入FATAL狀態,但設法首先發送一些請求。 – Carl 2013-02-26 10:19:12

0

在灰:

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