Perlスクリプトを介して毎秒vmstatを出力し、各行にタイムスタンプを表示する次のコマンドラインがあります。
vmstat 15 | /home/Beer/addtimestamp.pl > File_1
addtimestamp.plの内容:
!/usr/bin/perl while (<>) { print localtime() . ": $_"; }
それでは、出力が「File_1」ファイルにリダイレクトされないのはなぜですか?
これを行わない場合はうまく機能し、問題なく毎秒完全に出力を印刷します。
答え1
あなたはバッファトラップに閉じ込められています。 Perl は出力をバッファリングし、バッファがいっぱいになったときだけディスクに書き込みます。バッファリングはパフォーマンスの面では良いですが、低いデータレートでは混乱する可能性があります。十分に長く待つと、ファイルが記録されていることを確認できます(tail -F File_1
.標準バッファサイズは4kBだと思います。
$|=1
Perlでバッファリングを無効にするには、以下を追加します。
vmstat 1 | perl -e '$| = 1; while (<>) { print localtime() . ": $_"; }' > /tmp/fileetje