再起動時にログファイルをローテーションするソフトウェアを使用していますが、開発中は頻繁に再起動するため、常に最新のログファイルを監視したいと考えています。
less
通常どおりに開始して+less program.log
を押して末尾に移動すると、ログ ファイルがローテーションされても、古いログ ファイルの監視が続行されます。これは、inode 番号が同じままで、その inode へのファイル ハンドルが開いているためだと思います。Shiftfless
現在呼び出されているログ ファイルの最新のアクティビティを監視することは可能ですかprogram.log
?
具体的には、私は Sun OS で作業しているので、そこで動作するソリューションが理想的です。
答え1
less --follow-name
のバージョンがサポートしている場合は使用してくださいless
。
このオプションはバージョン 416 で導入されました。
Shift+F次に、内で通常の follow コマンドを実行しますless
。
答え2
オプションless
は--follow-name
ソリューションの一部にすぎません。
を置き換えるにはtail -F
、別の引数が必要です。
less --follow-name +F file.log
のようなオプションだけでは、less --follow-name file.log
実際にはファイルの更新の追跡は開始されません。 を押して追跡モードに入る必要がありますShiftF。
( で移動するには、モードを終了しますControlC。)
ファイルに従う代わりに、--follow-name
行動を修正するの少ない。これにより、ファイル記述子ではなくファイル名に基づいて、 内の
コマンド キーがフォローされるようになります。ShiftFless
less
また、フォローモードで起動するための通常のオプションはありません。
ただし、コマンドラインを使用して実行するキーストローク起動後に をプレフィックスとして付けることで、 を に変更できます+
。
修飾子オプションを と組み合わせると+F
、less
実際には (変更された) フォロー モードで起動します。
単独で使用して+F
plain と同等の意味を表しますtail -f
:
less +F file.log
答え3
私は次のタイトルの U&L Q&A で答えを見つけました:ログローテーションされたファイルの を実行するにはどうすればよいでしょうかtail -f
?。
使用方法tail
:
(システムに GNU tail をインストールするオプションがある場合)
tail -F program.log
からテールマニュアルページ:
-f, --follow[={name|descriptor}]
output appended data as the file grows; -f,
--follow, and --follow=descriptor are equivalent
-F same as --follow=name --retry
--retry keep trying to open a file even when it is or becomes
inaccessible; useful when following by name, i.e., with
--follow=name
鍵となるのは--retry
スイッチです。これはtail
コマンドに、ファイル名を指定して再試行し続けるように指示します。-F
スイッチは a-f
と a の両方を実行します--retry
。
使用less
@StephaneChazela がコメントで指摘したように、以下は機能しません。
tail -F program.log | less
他に選択できる唯一のオプションは、less が--follow-name
スイッチとless
ファイルを直接サポートし、使用をtail
完全に放棄することを前提として、less を直接使用することです。
less --follow-name program.log