簡體   English   中英

如何在 supervisord 中捕獲 Flask CLI 命令的 output 並將其重定向到標准輸出?

[英]How to capture output of Flask CLI command in supervisord and redirect it to stdout?

這是我的 Flask CLI 腳本。 它等待來自rabbitmq的消息並將它們打印出來。

import pika
import click
from app import app_queue
from app import RABBITMQ_USER
from app import RABBITMQ_HOST
from app import RABBITMQ_PASSWORD
from app import RABBITMQ_PASSWORD
from app import RABBITMQ_PORT
from app import RABBITMQ_VHOST
from flask import current_app
from flask.cli import with_appcontext
from threading import Event

credentials = pika.PlainCredentials(RABBITMQ_USER, RABBITMQ_PASSWORD)
parameters = pika.ConnectionParameters(RABBITMQ_HOST, RABBITMQ_PORT, RABBITMQ_VHOST, credentials)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()


@app_queue.command("listen", help="Listen to default queue.")
@click.argument("queue", required=False)
@with_appcontext
def consume_message(queue):
    queue = queue if queue else 'results'
    print(f'Command is listening for "{queue}" queue.', flush=True)

    channel.queue_declare(queue, durable=True, exclusive=False)
    channel.basic_consume(queue=queue, on_message_callback=process_results)

    print(f'[*] Waiting for messages. from "{queue}" queue. To exit press CTRL+C', flush=True)
    channel.start_consuming()

    Event().wait()


def process_results(ch, method, properties, body):
    print(" [x] Received %r" % body, flush=True)
    ch.basic_ack(delivery_tag = method.delivery_tag)

該腳本由supervisord執行,觸發flask queue listen命令。

[program:app_rabbitmq]
user=root
numprocs=1
directory=/src
autostart=true
autorestart=true
process_name=%(program_name)s
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
command=flask queue listen

如何將 Flask CLI 命令的 output 重定向到標准輸出,以便我可以使用docker logs <my_container>命令看到它?

我找到了解決方案。 這是我做的三件事。

  • 而是將我的日志重定向到/dev/stdout我將它重定向到/proc/1/fd/1

  • 我在 nodaemon 模式下啟動supervisord supervisord -n

  • 我在我的 docker 圖像中設置了這兩個環境變量export PYTHONUNBUFFERED=Trueexport PYTHONIOENCODING=UTF-8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM