我有一个烧瓶服务器,用于运行Fabric任务的api。因此,url / tail的帖子会在多个主机上并行运行尾部,并将结果输出到本地磁盘上的文件中。
@parallel
def tail_task(output_fh, tla, grep):
tail_cmd = 'tail -F /var/log/someservice/*-server.log | grep -i INFO'
try:
sudo(tail_cmd, stdout=output_fh)
except Exception, e:
print e.message
return "FAIL!!"
我打电话给
@app.route('/tail', methods=['POST'])
def tail():
output_fh = open('tail_output.log', 'w')
result = execute(tail_task, hosts=hosts_list)
帖子有效,因此对该网址进行后期调用会开始在磁盘上写入文件。我遇到的问题是我不知道如何阻止这项任务。因此,如果呼叫到来,它将永远等待响应,因为sudo(tail_cmd)将不会退出。知道如何阻止它吗?或者我该怎么做呢?
然后,我正在提供一个获取网址,该网址从该文件中读取内容并将其流式传输:
@app.route('/get_tail', methods=['GET'])
def stream():
def generate():
with open('tail_output.log') as f:
while True:
yield f.read()
time.sleep(0.01)
return app.response_class(generate(), mimetype='text/event-stream')