centos5.8 を使用しています。特定のログを編集した後、syslog がログの書き込みを停止するのはなぜでしょうか。
たとえば、/var/log/messages の行を切り取った後、syslog は新しいログを書き込みません。古いログだけが残っています。
しかし、メッセージ ファイルを削除してシステムを再起動すると、syslog は正常に動作します。
特定のログを編集した後、syslogd が新しいログを継続的に書き込む方法はありますか??
ファイルがどの程度正確に編集されるかによって異なります。
syslogd
継続的に書き込むためにファイルを開いたままにしておくことを忘れないでください。unlink()
エディターが古いファイルをing またはing した後に古い名前で新しいファイルを書き込む場合rename()
、その古いファイルは syslogd に対して引き続き動作します。ただし、新しいファイルは変更されません。
シグナルで使用する新しいファイルについて通知できますHUP
。
まあ、それはsyslogdがどのように機能するかによって異なります。ところで、システム ログ ファイルを編集するのはおそらく良い考えではないことを述べておく必要があります :-)
UNIX ファイル システムの動作方法の 1 つの特殊性に気がついたかもしれません。
プロセス A がファイルを開いて書き込みを行っている場合、プロセス B はそのファイルを削除することができます (たとえばrm
、古いファイルを削除して新しいファイルを書き直す編集セッションで)。
元のファイルを削除してもデータは破壊されません。ファイル名 (ディレクトリ エントリ) とそのデータの間のリンクが切れるだけです。
元のファイルを開いているプロセスは、必要な限り書き込みを続けることができますが、ファイル システムにはエントリがないため、(簡単に) 見ることはできません。
そのファイル名の新しいファイルが存在する可能性がありますが、プロセス A はそれに書き込みません。元のファイルに書き込みます。古いファイルと新しいファイルの間に接続はありません。
ディスク容量が少なくなり、多くのファイルを削除していくらかクリアすることにしたときに、この効果が時々見られます。プロセスがそれらのファイルを開いている場合、スペースがまだ使用されているため (そしておそらく使用量が増加しているため)、それらを削除してもまったく役に立ちません。
ファイルを削除し、ファイルを開いたままにしているプロセスにそれらを解放するよう説得する必要があります。
/var/log/syslog を編集した場合は、後で syslog サービスを再起動する必要があります。これは、syslogd がファイル ハンドルを再度開く必要があるためです。