開いたファイルハンドルに影響を与えずに新しいファイルへのシンボリックリンクを「ロール」することは可能ですか?

開いたファイルハンドルに影響を与えずに新しいファイルへのシンボリックリンクを「ロール」することは可能ですか?

ローカルで開発中のアプリケーションは、現在のタイムスタンプでフォーマットされたファイルに出力を書き込みますapp-%Y%m%d.log

ターミナルウィンドウで現在のログを簡単に追跡できるように、今日のログを指すというcurrent.logシンボリックリンクを使用しました。

毎日の作業を開始したら、tailプロセスを終了し、今日のファイルへのシンボリックリンクを指定してからtail -f current.log

tail再起動せずにファイルハンドルの宛先を変更してシンボリックリンクの宛先を変更できますかtail

この「新しいタスクの開始」タスクを自動化するには、今日のファイルへのシンボリックリンクを指すようにcron'edスクリプトを設定するのが簡単です。しかし、既存のtailプロセスは、ターゲットが変更されたことを知らないようです。

ベストアンサー1

定期的にファイルを閉じて再度開くことができないと不可能だと思います。 tail(または他のプログラム)がファイルを開くと、ファイルのinodeへのハンドルを取得します。この時点で、ファイル名とリンクは参照されなくなりました。これがファイルシステムからファイルを削除することができ、それを開くすべてのプログラムが機能し続ける理由です。 ;astプログラムがファイルを閉じたときにのみ、実際にディスクから削除されます。

更新:少なくともOS Xバージョンでは、ファイルが移動された場合にファイルを再度開くことができる-Fオプションが最後にあります。

おすすめ記事