監視を実行するためにスクリプトを呼び出す基本スクリプトがあります。
ログがないかアクセスできなくなった例外をキャッチしようとしています。
tail -f
-F
ログ名は現在の日付に基づいて指定されるため、代わりに使用してください。
trap
tail -f
うまくいくかもしれませんが、監視されているログがもう存在しない場合は、どの信号が返されるのかわかりません。
それ以外の場合は、基本スクリプトでループチェックを実行する必要がありますか[ -r $Log]
?
答え1
プログラムはtail
ファイルが削除されたことを知らない。これには別のものが必要です。これinotifyLinuxの機能により、アプリケーションはファイルイベントに関する通知を受け取ることができます。他のほとんどの大学にも同様の機能があります。次のコマンドは、file.log
削除時に通知を印刷します。
inotifywait -e delete file.log
答え2
ちょうど主な問題がどこにあるかを確認しようとしました。
tail -f
既存のファイルに対して操作を実行してからファイルを削除すると、tail
これはまったくわかりません。理由は簡単です。tail -f
ファイルの内容を参照する読み取り専用ファイルハンドルを開きます。これでファイルが消えると、メタディレクトリエントリのみが消えます。最後のFHが閉じたときに割り当てが解除されます。tail
この場合はそうです。
だからあなたはする必要があります
tail -f
独自のバックグラウンドプロセスに入れてPIDを覚えてください。- ファイルの存在を監視するために別のプロセスを開始します(毎秒whileループなど)。
- このモニターがファイルが消えたことがわかった場合は、選択された信号を使用してそのテールプロセスのPIDにテールプロセスで利用可能な信号を送信する必要があります
trap
。
答え3
$ tail -f blah
tail: cannot open `blah' for reading: No such file or directory
$ echo $?
1
最初にファイルが存在しない場合はテストできますが、ファイルにアクセスできなくなると役に立ちません。while
この場合、ループはより良いかもしれません。
while [ 1 ]
do
tail $1
if [ "$?" != "0" ]
then
echo "No access to file"
exit 1
fi
done
私の考えはスタックオーバーフロー回答。他のオプションもありますが、これは簡単です。