web-dev-qa-db-ja.com

すべてのログファイルを切り捨てる方法は?

/var/log/ディレクトリ内のすべてのログファイルを切り捨てる解決策を教えてもらえますか?

そして知識だけのための質問、それは良いアイデアですか?

#!/bin/bash
LOGDIR="/var/log"
for logfile in $(ls $LOGDIR/*log)
do
  truncate -s 0 $logfile
done
16
pylover

これを試して:

truncate -s 0 /var/log/*log

編集:

これを複数回行いたい場合は、logrotateを使用してログを処理する必要があります。通常、ubuntuにインストールされます。 man logrotateをご覧ください(またはインストールされていない場合は オンラインマンページ をご覧になるか、Sudo apt-get install logrotateでインストールしてください)

マンページから:

logrotateは、大量のログファイルを生成するシステムの管理を容易にするように設計されています。ログファイルの自動ローテーション、圧縮、削除、およびメール送信が可能です。各ログファイルは、毎日、毎週、毎月、または大きくなりすぎたときに処理されます。

32
D-E-N

all第1レベルのログフォルダーにあるものだけでなく、ログファイルを消去する場合は、以下を使用できます。

shopt -s globstar                  # if needed
truncate -s 0 /var/log/*.log       # first-level logs
truncate -s 0 /var/log/**/*.log    # nested folders, like /var/log/nginx/access.log

既にlogrotateを実行している場合は、回転した.gzログも消去する必要があることに注意してください。

find /var/log -type f -name '*.[0-99].gz' -exec rm {} +

これの有効な使用法は、たとえば、配布用のVMアプライアンスコンテナの構築です。

not定期的なメンテナンスの一環としてこれを行う必要があります。D-E-Mが非常に正しく提案しているように、logrotateを使用してください。

10
msanford

@ D-E-N までフォローアップ

これにより、/var/log内のすべてのログファイルが検索され、0バイトに切り捨てられます。

find /var/log -type f -iname '*.log' -print0 | xargs -0 truncate -s0
1
Luka

/ var/logs内のログをローテーションしてlogrotate機能でローテーションすることをお勧めしますが、いつでもしたいわけではありません。システムログが彼女に出力され、障害をデバッグするのに役立ちます。

Logrotateを使用しないことが必要な場合は、オプションを検討できます。 UNIXシステムのいくつかのフレーバーでは、truncateは簡単なオプションですが、このコマンドはすぐに使用できないため、インストールする必要があります。新しいコマンドをインストールできない場合は、以下のループを使用できます。

for logfile $(ls /path/*.log)
do 
  cat /dev/null > $logfile
done
0
Devoloper250