使っていますデーモンツールプロセスとその出力ログを監視します。使っていますマルチログディスクにログを書き込みます。
ログ実行スクリプトは次のとおりです。
#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
cd /usr/local/script_dir
exec multilog t s16777215 n50 '!tai64nlocal' '!/bin/gzip' /var/log/script_log
監視されるプロセスは出力をstderrにも記録します。したがって、プロセスの実行スクリプトには、stderrをstdoutにリダイレクトする次の行があります。
exec 2>&1
exec ./my_process
ただし、ログファイルを追跡すると、数百行の出力ポップアップが表示され(監視対象のプロセスは数秒ごとに出力を記録します)、ログ行のタイムスタンプはマイクロ秒未満のレベルに変わります。プロセスの性質上、ログライン間の時間差が小さくないことがわかります。明らかに、マルチログは出力をバッファリングし、ファイルに書き込む準備ができたらタイムスタンプを追加します。タイムスタンプに行が出力された時間をより正確に反映したいと思います。この問題をどのように解決しますか?
答え1
監視されるスクリプトはPythonスクリプトです。すべての標準ストリームをバッファリングされないようにするには、-u
インタプリタにオプションを渡すだけで機能することがわかりました。これは私の問題を解決しました。