
私は SSH を使用して接続するメール サーバーを実行しています。私のサーバー.bash_profile
は、特定のセッションに SSH セッションを接続するように構成されていますscreen
。
ここで、ログ(例えばsyslog)をこのスクリーンセッションの1つのウィンドウに出力したい。
tail -f /var/log/syslog
しかし、出力は毎日 6:25 に停止します。ログがローテーションされる時間だと思います。ログを画面に印刷する方法はありますか?
答え1
必要なのはtail --follow=name /var/log/syslog
その理由は、デフォルトでは(おそらくパフォーマンス上の理由から)tail
指定されたファイルを開いてから監視するためです。ファイル記述子変更の呼び出しから取得しますopen(2)
。これは、ファイルが変更されている限り、つまり追加または書き換え(最初に切り捨てる)されている限りは正常に機能しますが、ファイルが交換されたつまり、削除されて同じ名前で作成されるのですが、logrotate
通常はそれが行われます。
の「名前」モードでは、ファイルシステム層を介してファイル名を毎回「解決」するよりコストのかかるシステムコールを使用し--follow
、ファイルがいわゆるtail
stat(2)
tail
「iノード」tail
ファイルを再度開きます。
出力man tail
:
-f, --follow[={name|descriptor}]
ファイルが大きくなるにつれて追加されたデータを出力します。オプション引数がない場合は「記述子」を意味します。
-F
次のように定義されているコマンドラインオプションも参照してください。
-F
と同じ--follow=name --retry
答え2
あなたの推測は実際正しいです。この時点で、syslog はログに書き込みを中断し、それを gz にして、ログを再開します。
試してみるといいでしょう
tail -f --retry /var/log/syslog
この方法では、ログローテーションが完了したときに、tailはファイルを再度開くように再試行する必要があります。