supervisord 事件监听器
我正在尝试为 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()
但是触发器没有启动,它在尝试几次后就进入了 FATAL 状态。
statechanges entered FATAL state, too many start retries too quickly
有没有什么想法,或者有人能给我一个如何为 supervisord 编写监听器的例子吗?
2 个回答
0
在ash中:
command=sh -c 'echo "READY"; while read -r line; do echo "$line"; supervisorctl shutdown; done'
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