bashスクリプトを使用して現在の日付の名前を付けた複数のログファイルを監視するタスクがあります。 YYYY-MM-DD.log.
(1)ファイルをフォローしましたが、tail -f
ファイルの回転を処理できませんでした。
それにもかかわらず、tail -F $FILENAME
最大24時間しかログを追跡できず、再起動が必要です。
私が達成したいのは、同様のものを作成してtail -F $CURRENTDATE
永遠に実行し、深夜ごとに現在の日付の名前を付けた新しいログファイルに従うように切り替えることです。
しかし、変数は$CURRENTDATE
動的ではないようです。crontab
24時間ごとにスクリプトを実行せずにこれを実行する他の方法はありますか?たぶん、シンボルファイルや他のものを設定しますか?
(2) 同時にtail -f
使用する場合、後続のファイルが失われるか、名前が変更された場合、どのシグナルが返されますか?実行中の例外をキャッチする方法。
ベストアンサー1
この変数は$CURRENTDATE
思ったほど動的ではありません。tail -F $CURRENTDATE
この変数は、実行のためにコマンドを評価すると拡張されます。これは、コマンドの実行後に実行してみるとわかりps
ます。出力には、現在の日付以外の値が表示されます$CURRENTDATE
。
$ CURRENTDATE=$(date +%Y%M%d.log)
$ tail -F $CURRENTDATE
$ ps -eaf|grep tail
saml 1171 13564 0 22:13 pts/4 00:00:00 tail -F 20130517.log
あなたが経験している問題は、通常、ほとんどのサーバーデーモン(Apache、Nginx、Jettyなど)がすべての現在の日付を名前付きファイルに書き込んでから、そのファイルを別の名前error.log
(後でerror_20130517.log
)に回転させる理由です。
error.log
これにより、同じコマンドを使用して継続的に監視できますtail -F error.log
。