すべてのコンテンツを手動で削除した後、Apacheがログファイルへの書き込みを拒否する


9

コンテンツを手動で削除した後、Apacheがログファイル(ErrorLog/ ファイル)への書き込みを拒否するのはなぜCustomLogですか?

Apacheを再起動するまで、これらのログファイルには再度書き込まれません。

これはなぜですか?Apacheを再起動せずにログファイルを安全に削除するにはどうすればよいですか?

Ubuntu 10.04にApache 2.2.14をインストールしています。


どのようにコンテンツを削除しますか?
Dom

@Dom vimで開き、「dG」(すべてのコンテンツを削除)してから、「!wq」で保存します。所有権/グループ/権限は変更されません。
AtomicFault 2012年

3
@AtomicFaultおそらくそれは、Apacheログをローテーションすることを想定していないためですlogrotateApacheに適切なリロード/再起動信号を送信するようなものを使用する必要があります(以下のPedroの回答を参照)。Nickgrimは、ログが停止する「理由」をカバーしました-Apacheは引き続き古いiノード(書き込み可能な場所にファイルシステムに接続されていません)に書き込みを続けています
voretaq7

回答:


14

私は簡単なテストをしました:

$ echo vim test > vimtest
$ ls -i vimtest
35149 vimtest
$ vim vimtest
<dG, :wq>
$ ls -i vimtest
35148 vimtest

vimtest編集後のiノード番号は異なるため、実際には異なるファイルであることに注意してください(古いファイルと同じ名前ですが)。

したがって、vimでファイルを編集すると、古いファイルが削除され、同じ名前で新しいファイルが作成されます。表示されている問題は、Apacheが古い(削除された)ファイルにまだ書き込みを行っていることが原因です(これはで確認できますlsof)。

ログファイルを本当に切り捨てたい場合は、検討してくださいtruncate -s 0 /path/to/file.log(インプレースで切り捨てられているようです)。


2
echo> /path/to/file.logも機能します

8

Apache2ログファイルのローテーションを強制的に実行することをお勧めします。

$ sudo logrotate -f /etc/logrotate.d/apache2

を見ると/etc/logrotate.d/apache2、次のApache2コマンドでログファイルを削除した後で、設定をリロードする必要があることがわかります。

$ sudo /etc/init.d/apache2 reload

Ubuntuでは、代わりに次のことを実行できます。

$ sudo service apache2 reload
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.