web-dev-qa-db-ja.com

プロセスがファイルに書き込んでいる間にファイルを削除/切り捨てる方法はありますか?

Linuxで実行されているApacheサーバーで、非常に大きくなるログファイル(access_log)に書き込んでいます。サーバーの空き容量がなくなります。サーバーを再起動せずにファイルを削除または切り捨てる方法はありますか(ダウンタイムは必要ありません)。

7
erotsppa

ログファイルをリセットする方法

遅かれ早かれ、ログファイルをリセットする必要があります(access_logおよびerror_log)それらが大きすぎるか、不要な古い情報でいっぱいだからです。

access_logは通常、10,000リクエストごとに1Mbずつ増加します。

ほとんどの人がログファイルを置き換える最初の試みは、単にログファイルを移動するか削除することです。これは機能しません。

Apacheは、ログファイルが移動する前と同じオフセットでログファイルへの書き込みを続行します。これにより、古いログファイルと同じ大きさの新しいログファイルが作成されますが、現在では数千(または数百万)のnull文字が含まれています。

正しい手順は、ログファイルを移動してから、Apacheにログファイルを再度開くように通知することです。

Apacheは[〜#〜] sighup [〜#〜](-1)シグナルを使用してシグナルされます。例えば.

 mv access_log access_log.old 
 kill -1 `cat httpd.pid` 

注意: httpd.pidは、Apache httpdデーモンのプロセスIDを含むファイルです。Apacheは、これをログファイルと同じディレクトリに保存します。

多くの人がこの方法を使用して、毎晩または毎週ログファイルを置換(およびバックアップ)しています。

http://httpd.Apache.org/docs/1.3/misc/howto.html#logreset

14
madcolor

ログローテーションは長期的な解決策ですが、当面の質問に対する答えは、次のようなファイルを切り捨てることです。

Sudo cat /dev/null > /var/log/httpd/access_log

ルートとしてログインしておらず、ログファイルの場所を想定していますが、必要に応じてコマンドを調整し、実行中のApacheプロセスに影響を与えずに開いているログファイルをすばやく切り捨てることができます。

7
jnichols959

ログファイルをゼロにする...

# :>filename
7
ewwhite

書き込みアクセス権がないログファイルを切り捨てる/ゼロにする場合は、次のようにすることができます

Sudo truncate -s0 logfile
5
drevicko

logrotateを使用してみてください

  • これは、ログをローテーションするための構成可能なオプションを提供する強力なツールです。
  • prerotatepostrotateの間にコマンドを実行する機能もあります
  • copytruncateを使用すると、既存のファイルをコピーしてから切り捨てることができます。コピーは、必要に応じて、hadoop、バックアップ用のs3などの別のストレージに移動できます。
  • さらに、/usr/sbin/logrotate --force /etc/logrotate.hourly.conf 2>&1 >> /tmp/loggerを使用して、/etc/cron.hourly/logrotateなどのcronを設定できます。

詳細man logrotate

3
user390652

$ cat filename >bkp_filenameのように元のファイルを無効にするよりも「filename」のコピーを作成するよりも、最初に$ >filenameを作成できます。これでサイズがゼロに縮小されます。これで、$ gzip bkp_filenameのようなbkp_filenameにZipが作成されるため、サイズが大きくなり、マウントポイントは緑色になります。

2
rohtash

プロセスに同じ問題があり、Linux名前付きパイプを使用して修正しました。ここに私がやったことがあります(/tmp/job.logがログファイルであると仮定):

  1. 仕事をやめる
  2. rm /tmp/job.log
  3. mkfifoを使用して名前付きパイプを作成:mkfifo /tmp/job.log
  4. 実行:cat /tmp/job.log | gzip> /tmp/job.log.gz
  5. 仕事を始める

このようにして、ログを保持し、ディスク使用量を大幅に削減することができました

gzipは、フィルター処理、回転などのコマンドに置き換えることができます。

0
Mohsen