ホームページ  >  記事  >  バックエンド開発  >  Linuxサーバーはログを自動的にカットしてクリーンアップします Linuxシステム Linuxの読み方 Linuxチュートリアル

Linuxサーバーはログを自動的にカットしてクリーンアップします Linuxシステム Linuxの読み方 Linuxチュートリアル

WBOY
WBOYオリジナル
2016-07-29 08:54:141416ブラウズ

要件

nginx ログは成長し続けるため、管理を容易にするために自分でログをカットする必要があります:

  1. ログを日付ごとに自動的にカットし、最小単位は日です。
  2. ログの合計量が一定量を超えると、ログは自動的かつ直接消去され、合計量は 1000MB を超えることはできません。
  3. それをcrontabのスケジュールされたタスクに書き込みます。

分析

  1. nginx ログ ディレクトリには、それぞれ access.log と error.log が含まれています。日付に従ってログを自動的に切り取るには、毎日のログを「yyyymmdd_access/error.log」の形式で保存し、各ログの名前を次のように変更する必要があります。 mv. 1 日分のログ ファイルで十分です。
  2. ログのクリーンアップは簡単です。このフォルダーのサイズを確認し、特定の日付より前のログ ファイルをクリーンアップするだけです。
  3. crontab タスクも比較的単純です。詳細はここでご覧ください。
  4. 問題の鍵は、mv で昨日のログ ファイルの名前を変更した後も、nginx が名前を変更したファイル (access_20160409.log など) にログを書き込むことです。私たちの目的は、nginx に新しいログ ファイル (access.log) を再生成させることです。ログ)を書きます。
  5. ご存知のとおり、Linux システムではすべてがファイルであるため、各プロセスには独自のファイル記述子があり、nginx プロセスは独自のファイル記述子を nginx.pid に書き込みます。nginx に新しいファイルを再度開かせるように指示する必要があります。ログ ファイル (ログ ファイルの設定の詳細はここで確認できます。簡単に言えば、ログに記録される内容です。) そこで、次のコマンドが必要です:

    kill -USR1 `cat ${pid_path}`

    このコマンドの意味は次のとおりです: 最初の cat nginx への pid は整数です、シグナル USR1 がこのプロセスに送信され、nginx プロセスがこのシグナルを受信すると、設定に従って新しいログ ファイルが再度開かれ、ログが書き込まれます。

実装

スクリプトcut_nginx_log.sh:

<code><span>#!/bin/bash</span>
log_path=/path/to/nginx/
pid_path=/path/to/nginx.pid

<span>#清理掉指定日期前的日志</span>
DAYS=<span>30</span><span>#生成昨天的日志文件</span>
mv <span>${log_path}</span>access.log <span>${log_path}</span>access_$(date <span>-d</span><span>"yesterday"</span> +<span>"%Y%m%d"</span>).log
mv <span>${log_path}</span>error.log <span>${log_path}</span>error_$(date <span>-d</span><span>"yesterday"</span> +<span>"%Y%m%d"</span>).log

kill -USR1 `cat <span>${pid_path}</span>`

<span>#文件夹大小</span>
size=du -m <span>-s</span><span>${log_path}</span><span>if</span> [size <span>-gt</span><span>1000</span>];<span>then</span>
    find <span>${logs_path}</span> -name <span>"access_*"</span> -type f -mtime +<span>$DAYS</span> -exec rm {} \;
    find <span>${logs_path}</span> -name <span>"error_*"</span> -type f -mtime +<span>$DAYS</span> -exec rm {} \;
<span>fi</span></code>

がcrontabに追加されました:
(毎日午前0時に自動的に実行されます)

<code>crontab -e
<span>0</span><span>0</span> * * * /path/<span>to</span>/<span>script</span></code>

これにより、ログの自動カットとクリーニングの問題が解決されました。ご不明な点がございましたら、お気軽にお問い合わせください。

')​​.addClass('事前番号付け').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

上記では、Linux コンテンツを含む Linux サーバーのログの自動カットとクリーニングについて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。