スーパーバイザーの子stdout.log:リアルタイムで読む

スーパーバイザーの子stdout.log:リアルタイムで読む

スーパーバイザはいくつかのサブプロセスをアクティブにします。

私は次のように構成します。

[program:XXXXX]
command=/XXXXX/XXXXX
directory=/XXXXXX
autostart=true
autorestart=true
startsecs=3
startretries=10000
stdout_logfile=/XXXXXX/stdout.log
stdout_logfile_maxbytes=1MB
stderr_logfile=/XXXXXX/stderr.log
stderr_logfile_maxbytes=1MB

プロセスの1つは、テスト中にリアルタイムで読みたい多くの画面出力(1秒あたり5行)を生成することです。

これでログインしましたstdout.log

stdout.log一緒に読んでみたい

watch -0.1 tail /XXXXX/stdout.log

しかし、私は各行が受信されたときに更新されないことを発見しました。ログの内容は、事前定義されたサイズに達するまでキャッシュされ、ファイルに保存できます。

後で参照するためにstdoutを維持する必要はありません。

監督者は次のように設定できますか?継続的に更新 stdout.log

それとも長期的なディスク損傷を防ぐために、最後のX行を保存せずにstdout再印刷できますかstdout.log

ベストアンサー1

ディスクの損傷を防ぐために(長い間それを心配している人を見たことはありません)、RAMディスクを作成してこれらのログファイルを次のように指定できます。

mkdir /var/log/tmplogs
mount -t tmpfs -o size=5m tmpfs /var/log/tmplogs

または fstab 形式を使用します。

tmpfs       /var/log/tmplogs   nodev,nosuid,noexec,nodiratime,size=5M 0 0

次に、その/var/log/tmplogsディレクトリをそのファイルの宛先として使用します。

これは、前述のログバッファリングの問題を解決しません。ただし、通常、遅延はコマンドが出力をバッファリングするために発生し(ttyの有無にかかわらず異なる動作をする可能性があります)、SupervisordではなくSupervisordの例に従って確認できます。問題803

stdout.logを継続的に更新するようにSupervisorを設定できますか?

私はそれが受信されるとすぐにログに記録する必要があり、ほとんどの場合、監督者の問題ではないので、いいえと言いたいと思います。ただし、起動コマンドがないと、エラーが発生したかどうかを判断する方法はありません。あなたが注文するのは正常です。

おすすめ記事