Log.txtに書き込むアプリケーションを実行しています。アプリが新しいバージョンに更新され、サポートされているプラグインの互換性がなくなりました。これは、大量のエラーをlog.txtに強制し、別のログファイルへの書き込みをサポートしていないようです。
それらを別のログに書き込むにはどうすればよいですか?
私は、log.txtをハードリンク(アプリケーションは違いを正しく認識できないのか?)または/ dev/nullを指すハードリンクに置き換えることを検討しました。私のオプションは何ですか?
# cp -a /dev/null log.txt
これにより、正しいメジャーおよびマイナーの開発番号が付いたnullデバイスがlog.txt
にコピーされるため、別のnull
を取得できます。
カーネルでは、デバイスは名前ではまったく認識されず、メジャー番号とマイナー番号で認識されます。使用しているOSがわからないので、すでにわかっているところから番号をコピーするだけで便利です。メジャー番号とマイナー番号を間違えて作成すると、おそらく他のデバイス、おそらくディスクなど、書き込みたくないデバイスを作成したことになります。
/ dev/nullへのシンボリックリンクを作成でき、rootである必要はありません。
ln -s /dev/null log.txt
ここでの他の答えはおそらく機能します。特に、symlinkソリューションがおそらく最も簡単なソリューションになるでしょう。これは主に完全を期して提供します。
mknod
(またはcp -a
)を含むソリューションは、ファイルを含むファイルシステムがデバイスをサポートしていない場合(たとえば、nodev
オプションでマウントされた場合)に問題になります。そしてもちろん、ファイルシステム間のハードリンクは機能しません。
ハードリンクまたは新しいデバイスノードを作成する代わりに、バインドマウントを使用します。これにより、ファイルまたはディレクトリをファイルシステムツリーの一部から別の場所にマウントできます。したがって、たとえば、次のコマンドを実行できます。
mount -o bind /dev/null /path/to/log.txt
これはハードリンクのように機能しますが、次のようになります。
完全な例:
bash-4.3# ls -l /var/log/boot.log
-rw-r--r--. 1 root root 7436 Dec 19 10:00 /var/log/boot.log
bash-4.3# mount -o bind /dev/null /var/log/boot.log
bash-4.3# ls -l /var/log/boot.log
crw-rw-rw-. 1 root root 1, 3 Dec 19 09:58 /var/log/boot.log
bash-4.3# echo words words words > /var/log/boot.log
bash-4.3# ls -l /var/log/boot.log
crw-rw-rw-. 1 root root 1, 3 Dec 19 09:58 /var/log/boot.log
これは、アプリケーションがlog.txtを処理する方法に大きく依存します。
アプリケーションが既存のファイルを開いて書き込むだけの場合、他の回答で説明されているように、/ dev/nullにシンボリックリンクし、別の場所にシンボリックリンクし、別の場所にハードリンクすることができます(ただし、ハードリンクはクロスファイルシステムにすることはできないため、これの多くのポイント)/ dev/nullデバイスノードのコピーをそこに作成するなど。
アプリケーションがlog.txtを削除して再作成した場合、OTOHは機能しません。ディレクトリ全体をどこか別の場所にシンボリックリンクして、書き込みを別のファイルシステムにリダイレクトすることもできますが、それはそれに関することであり、ディレクトリ内の他のものに対処する必要があります。
Log.txtというファイルを作成しようとする試みをすべて破棄しつつ、ほとんどの操作をそのまま通過させるカスタムオーバーレイファイルシステムを作成したいと本当に思っているなら、.
さて、名前付きパイプを使用した1つの不愉快な方法:
# create a named pipe
mkfifo /path/to/log.txt
# read contents from the pipe and redirect them to /dev/null
cat /path/to/log.txt > /dev/null
フィルターや送信ncなど、ダンプされたログを使用してほとんど何でもできます。
ファイルを実際のnullデバイスにすることを検討してください。 mknodで作成された「log.txt」ファイルは、正しいファイルタイプと同じマイナー番号およびメジャー番号で、nullデバイスとして機能します。