解決策 1:
以下を使用できます:
> /var/log/mail.log
これにより、ファイルを編集しなくてもログが切り捨てられます。また、スペースを取り戻すための信頼できる方法でもあります。ログで rm を使用してからファイル名を再作成するという間違いを犯すことがあります。別のプロセスがファイルを開いている場合、そのプロセスがそのファイルのハンドルを閉じるまでスペースを取り戻せず、アクセス許可を台無しにすることができます.
また、ログの内容を見ている場合は、 tail
を使用することをお勧めします コマンド:
tail -f /var/log/mail.log
Ctrl-C はテーリングを中断します。
解決策 2:
はい、適切な方法があります:クリアしません ログはまったくありません。 ローテーション 彼ら。ローテーションには、ログ出力を同じ名前の新しいファイルに切り替えることが含まれ、以前の N 個のログ ファイルは N 個の関連するファイル名のセットの下に保持されます。
ログをどのようにローテーションするかは、最初にログをどのように書き込んでいるかによって異なります。 これは見落としがちなポイントです。ここでの回答のいくつかは少なくともそれに触れており、一部のロギングプログラムはログファイルの開いているファイル記述子を保持しているため、ファイルを削除するだけではスペースが解放されず、実際に出力を新しいログファイルに切り替えることさえありません。
ログファイルを書き込んでいるプログラムが multilog
の場合 daemontools
から パッケージ、たとえば、ログをローテーションするために何もしません — 手動スクリプトも cron
もありません 仕事。 multilog
と伝えるだけです そのログ出力はディレクトリに送信され、それ自体がそのディレクトリ内の N 個のログ ファイルのセットを自動的にローテーションし、サイズが制限された状態で維持します。
ログファイルを書き込むプログラムが svlogd
の場合 runit
から パッケージ、別の例として、ほとんど同じことが当てはまります。ツールをディレクトリに向けること以外は何もしません。それ自体が、自動的にローテーションされ、サイズが制限された一連の N 個のログ ファイルをそのディレクトリに保持します。
rsyslog
を使用している場合 ログ ファイルを書き込む場合、ログ ファイルが特定のサイズに達したらログ プログラムを停止し、スクリプトを実行するように指示できます。実際にログ ファイルの名前を変更し、合計サイズの制約に基づいて古いログ ファイルを削除するには、スクリプトの本体を作成する必要がありますが、少なくともログ プログラムはファイルを閉じて、これが発生している間はログの書き込みを一時停止しています。
古い syslogd
syslog-ng などのロギング プログラムや logrotate
などのツールで例示されているように、ログをローテーションする方法 djangofan
が言及 ここでの別の答えでは、やや偶然です。 1 つは cron
を実行します ログ ファイルの名前を定期的に変更し、ログ デーモンを再起動するジョブ (実行中のデーモン スーパーバイザを使用)。もちろん、これの問題は、全体的なサイズの上限を強制しないことです。閑散期には N 個の非常に小さな日次ログ ファイルを取得できますが、忙しい日には、サイズ制限をはるかに超える 1 つの非常に大きなログ ファイルを取得できます。
これが、multilog
のような最近のより優れたツールの理由です。 そして svlogd
もちろん、ファイル サイズの構成オプションがあり、実際にログ ファイルのサイズ自体を確認します。世界は cron
のスケジュールでログをポーリングすることを学びました 仕事、または logrotate
デーモン、サイズが間違っているウィンドウを残し、これらのチェックを行う適切な場所を厳密に 管理者が定義したサイズ キャップを適用して、ログ ファイルが最初に実際にファイルを書き出すプログラム内にあるパーティションをログ ファイルが飲み込まないようにします。
解決策 3:
これも使えます..
truncate /opt/package/logs/*.log --size 0
ここで、/opt/package/logs 内のすべてのログ ファイルが空になります..
解決策 4:
はい、LogRotate という Linux 用のツールがあります。
解決策 5:
ログをクリアする理由がスペースを解放することである場合は、ログに書き込むプログラムを中断することなく、ログに /dev/null を cat できます。絶対に削除しないでください。一部のソフトウェアは、動作を停止したり、次の再起動までログを完全に無視したりすることで問題を起こす場合があります
cat /dev/null > /path/to/logfile
# to empty all the logs in a directory
for i in /var/log/*; do cat /dev/null > $i; done