2013-10-09 13 views
5

標準出力をファイルに記録したいのですが、リアルタイムモニタリングのために画面に表示させておきます。スクリプトは毎秒約10回何かを出力します。画面とファイルに同時にstdoutを表示する

私はstdoutをファイルにリダイレクトしてから、別の端末からそのファイルをtail-fしようとしましたが、何らかの理由でtailがスクリプトのファイルへの書き込みよりもかなり遅いです。

この遅延の原因は何ですか?後で調べるために、端末とファイルの両方に標準出力ストリームを1つずつ取り込む別の方法がありますか?

答えて

7

なぜtailラグ私が言うことはできませんが、teeを使用することができます。

Redirect output to multiple files, copies standard input to standard output and also to any files given as arguments. This is useful when you want not only to send some data down a pipe, but also to save a copy.

例:<command> | tee <outputFile>

+0

クールなコマンドは、以前は気づいていなかった。しかし、私のMac OS Xのボックスでは、tail -fよりもさらに遅れているようです。非常に奇妙な.... – BBnyc

2

ティーのコマンドを使用します。

tail -f /path/logFile | tee outfile 
3

どのくらいの遅れてお分かりですか?数百文字?数秒?分?時間?

あなたが見ているのはバッファリングです。ほぼすべてのファイルの読み書きがバッファされます。これには入力と出力が含まれ、パイプ内でバッファリングが行われます。一度にバイトではなく、データのパケットを渡すほうが効率的です。私は、HFS +ファイルシステムのデータはUTF-16に保存され、Mac OS Xは通常UTF-8をデフォルトとして使用すると信じています。 (NTFSでは、UTF-16を使用してデータも格納されますが、Windowsではデフォルトで文字データのコードページが使用されます)。

ですから、別の端末からtail -fを実行した場合、あなたはtailからバッファリングを見ることになるかもしれませんが、あなたは、パイプを使用し、teeとき、あなたはパイプで、多分なぜteeコマンドでバッファを有することができます遅れを見てください。

ところで、遅れがあることをどうやって知っていますか?あなたのプログラムがどれくらい素早くディスクに書き込んでいるかをどのように知っていますか?ファイルへの書き込みを追跡するためにプログラムに何かを印刷しますか?

この場合、考えているほど遅くならないかもしれません。ファイル書き込みもバッファリングされます。したがって、遅延はtail -fからではなく、スクリプトからをファイルに書き込むことが可能です。

関連する問題