GNU/Linux >> Linux の 問題 >  >> Linux

HowTo:10 の例を含む究極の Logrotate コマンド チュートリアル

ログ ファイルを効果的に管理することは、Linux システム管理者にとって不可欠なタスクです。

この記事では、UNIX logrotate を使用して次のログ ファイル操作を実行する方法について説明します。

  • ファイル サイズが特定のサイズに達したときにログ ファイルをローテーションする
  • 古いログ ファイルをローテーションした後、新しく作成されたファイルにログ情報を書き込み続ける
  • ローテーションされたログ ファイルを圧縮する
  • ローテーションされたログ ファイルの圧縮オプションを指定する
  • ファイル名に日付を付けて古いログ ファイルをローテーションする
  • ログ ローテーションの直後にカスタム シェル スクリプトを実行する
  • ローテーションされた古いログ ファイルを削除する

1. Logrotate 構成ファイル

以下は、logrotate が適切に機能するために知っておくべき重要なファイルです。

/usr/sbin/logrotate – logrotate コマンド自体。

/etc/cron.daily/logrotat e – このシェル スクリプトは、logrotate コマンドを毎日実行します。

$ cat /etc/cron.daily/logrotate
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

/etc/logrotate.conf – すべてのログ ファイルのログ ローテーション構成は、このファイルで指定されます。

$ cat /etc/logrotate.conf
weekly
rotate 4
create
include /etc/logrotate.d
/var/log/wtmp {
    monthly
    minsize 1M
    create 0664 root utmp
    rotate 1
}

/etc/logrotate.d – 個々のパッケージがシステムにインストールされると、ログ ローテーション構成情報がこのディレクトリにドロップされます。たとえば、yum ログ ローテーションの構成情報を以下に示します。

$ cat /etc/logrotate.d/yum
/var/log/yum.log {
    missingok
    notifempty
    size 30k
    yearly
    create 0600 root root
}

2. Logrotate size オプション:ファイル サイズが特定の制限に達したときにログ ファイルをローテーションします

1KB ごとにログ ファイル (たとえば、/tmp/output.log) をローテーションする場合は、次のように logrotate.conf を作成します。

$ cat logrotate.conf
/tmp/output.log {
        size 1k
        create 700 bala bala
        rotate 4
}

この logrotate 構成には、次の 3 つのオプションがあります:

  • サイズ 1k – ファイルサイズがこのサイズと等しい (または大きい) 場合にのみ logrotate が実行されます。
  • 作成 – 元のファイルをローテーションし、指定された権限、ユーザー、およびグループで新しいファイルを作成します。
  • rotate – ログ ファイルのローテーション数を制限します。したがって、これにより、最近の 4 つのローテーションされたログ ファイルのみが保持されます。

ログローテーション前の output.log のサイズは次のとおりです:

$ ls -l /tmp/output.log
-rw-r--r-- 1 bala bala 25868 2010-06-09 21:19 /tmp/output.log

ここで、以下に示すように logrotate コマンドを実行します。オプション -s は、logrotate ステータスを書き込むファイル名を指定します。

$ logrotate -s /var/log/logstatus logrotate.conf

注 :一部のファイルのログ ローテーションが必要な場合は常に、logrotate 構成を準備し、logroate コマンドを手動で実行します。
logrotation 後の output.log のサイズは次のとおりです。

$ ls -l /tmp/output*
-rw-r--r--  1 bala bala 25868 2010-06-09 21:20 output.log.1
-rwx------ 1 bala bala        0 2010-06-09 21:20 output.log

最終的には、ローテーションされたログ ファイルの設定に従います。

  • output.log.4.
  • output.log.3
  • output.log.2
  • output.log.1
  • output.log

ログのローテーション後、サービスに対応するログ ファイルは引き続きローテーションされたファイル (output.log.1) を指し、書き込みを続けることに注意してください。 apache を回転させたい場合は、上記の方法を使用できます。 access_log または error_log 5 MB ごと。

理想的には、/etc/logrotate.conf を変更して、特定のログ ファイルの logrotate 情報を指定する必要があります。

また、巨大なログ ファイルがある場合は、以下を使用できます:Unix で巨大なログ ファイルを表示するための 10 のすばらしい例

3. Logrotate copytruncate オプション:古いログ ファイルをローテーションした後、新しく作成されたファイルにログ情報を書き込み続けます。

$ cat logrotate.conf
/tmp/output.log {
         size 1k
         copytruncate
         rotate 4
}

copytruncate は、logrotate に元のファイルのコピーを作成し (つまり、元のログ ファイルをローテーションする)、元のファイルを 0 バイト サイズに切り捨てるように指示します。これにより、そのログ ファイルに属するそれぞれのサービスが適切なファイルに書き込むことができます。

ログ ファイルを操作しているときに、sed 代替、sed 削除のヒントが役立つ場合があります。

4. Logrotate 圧縮オプション:ローテーションされたログ ファイルを圧縮します

以下に示すように圧縮オプションを使用すると、ローテーションされたファイルは gzip ユーティリティで圧縮されます。

$ cat logrotate.conf
/tmp/output.log {
        size 1k
        copytruncate
        create 700 bala bala
        rotate 4
        compress
}

圧縮ログファイルの出力:

$ ls /tmp/output*
output.log.1.gz output.log

5. Logrotate dateext オプション:ログ ファイル名の日付を使用して古いログ ファイルをローテーションします

$ cat logrotate.conf
/tmp/output.log {
        size 1k
        copytruncate
        create 700 bala bala
        dateext
        rotate 4
        compress
}

上記の構成の後、以下に示すように、ローテーションされたログ ファイルに日付が表示されます。

$ ls -lrt /tmp/output*
-rw-r--r--  1 bala bala 8980 2010-06-09 22:10 output.log-20100609.gz
-rwxrwxrwx 1 bala bala     0 2010-06-09 22:11 output.log

これは 1 日に 1 回だけ機能します。同じ日に次にローテーションしようとすると、以前にローテーションされたファイルが同じファイル名になるためです。したがって、logrotate は、同じ日に最初に実行された後は成功しません。

通常、ログ ファイルの出力をリアルタイムで表示するには、tail -f を使用します。複数の tail -f 出力を組み合わせて、単一の端末に表示することもできます。

6.毎月、毎日、毎週のログローテーション オプション:ログ ファイルを毎週/毎日/毎月ローテーション

ローテーションを毎月 1 回行うため、

$ cat logrotate.conf
/tmp/output.log {
        monthly
        copytruncate
        rotate 4
        compress
}

毎週のログ ローテーションのために、以下に示すように Weekly キーワードを追加します。

$ cat logrotate.conf
/tmp/output.log {
        weekly
        copytruncate
        rotate 4
        compress
}

毎日のログ ローテーションには、以下に示すように、daily キーワードを追加します。ログを 1 時間ごとにローテーションすることもできます。

$ cat logrotate.conf
/tmp/output.log {
        daily
        copytruncate
        rotate 4
        compress
}

7. logrotate postrotate endscript オプション:ログのローテーション直後にカスタム シェル スクリプトを実行

Logrotate を使用すると、ログ ファイルのローテーションが完了した後で、独自のカスタム シェル スクリプトを実行できます。次の構成は、logrotation の後に myscript.sh を実行することを示しています。

$ cat logrotate.conf
/tmp/output.log {
        size 1k
        copytruncate
        rotate 4
        compress
        postrotate
               /home/bala/myscript.sh
        endscript
}

8. Logrotate maxage オプション:ローテーションされた古いログ ファイルを削除

Logrotate は、特定の日数が経過すると、ローテーションされたファイルを自動的に削除します。次の例は、ローテーションされたログ ファイルが 100 日後に削除されることを示しています。

$ cat logrotate.conf
/tmp/output.log {
        size 1k
        copytruncate
        rotate 4
        compress
        maxage 100
}

9. Logrotate missingok オプション:ログ ファイルが見つからない場合にエラーを返さない

以下に示すように、このオプションを使用して、実際のファイルが利用できない場合、エラー メッセージを無視できます。

$ cat logrotate.conf
/tmp/output.log {
        size 1k
        copytruncate
        rotate 4
        compress
        missingok
}

10. Logrotate compresscmd および compressext オプション:ログ ファイル ローテーション用の圧縮コマンドを指定

$ cat logrotate.conf
/tmp/output.log {
        size 1k
        copytruncate
        create
        compress
        compresscmd /bin/bzip2
        compressext .bz2
        rotate 4
}

以下の圧縮オプションは上で指定されています:

  • compress – 圧縮を行う必要があることを示します。
  • compresscmd – 使用する圧縮コマンドのタイプを指定します。例:/bin/bzip2
  • compressext – ローテーションされたログ ファイルの拡張子を指定します。このオプションがないと、回転したファイルのデフォルトの拡張子は .gz になります。したがって、bzip2 圧縮コマンドを使用する場合は、上記の例に示すように拡張子を .bz2 として指定してください。

Linux
  1. Linuxlogrotateコマンドを使用してログをローテーションおよびアーカイブします

  2. Linuxでの並べ替えコマンドと例

  3. 初心者向けの例を含むタイプコマンドチュートリアル

  1. 初心者向けの例を含むNumfmtコマンドチュートリアル

  2. 初心者向けの例を含むShufコマンドチュートリアル

  3. 15 の例を含む究極の Bash Array チュートリアル

  1. 例でchgrpコマンドを使用する方法

  2. 例を使用したBashヒアドキュメントチュートリアル

  3. Linuxでのファイルコマンドの基本的な例