Supervisord - プロセスのstdoutをコンソールにリダイレクトする 質問する

Supervisord - プロセスのstdoutをコンソールにリダイレクトする 質問する

私はスーパーバイザーを使用して複数のプロセスを実行することを計画しており、以下の supervisord.conf ファイルを見つけてください。

[supervisord]

[program:bash]
command=xyz
stdout_logfile =/tmp/bash.log
redirect_stderr=true

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock

[unix_http_server]
file=/tmp/supervisor.sock ; path to your socket file

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

bashというプロセスのstdoutをスーパーバイザコンソールにリダイレクトして、スーパーバイザを起動するときに

/usr/bin/supervisord

コマンドを実行すると、子プロセスのログを見ることができます。どうすればいいでしょうか? stdout_logfile 属性に syslog を設定してみましたが、うまくいきませんでした。

ベストアンサー1

次の設定オプションを使用して、プログラムの stdout をスーパーバイザの stdout にリダイレクトできます。

stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0

説明:

  • プロセスが開くと/dev/fd/1( と同じ/proc/self/fd/1)、システムは実際にそのプロセスのファイル記述子 #1(stdout)を複製します。stdout_logfileしたがって、これを として使用するとsupervisord、 はプログラムの stdout を独自の stdout にリダイレクトします。
  • stdout_logfile_maxbytes=0ログ ファイルのローテーションを無効にしますが、これは明らかに stdout には意味がありません。このオプションを指定しないと、デフォルト値が 50 MB であり、指定されたログ ファイルが通常のファイルではないことをスーパーバイザーが検出できないため、エラーが発生します。

詳細については:

http://veithen.github.io/2015/01/08/supervisord-redirecting-stdout.html

おすすめ記事