お問い合わせ

ブログ

これまでに経験してきたプロジェクトで気になる技術の情報を紹介していきます。

CentOS7 に logrotate を設定する。Asterisk の設定例もあり。

NMC NMC 3 years

§ basic of logrotate

logrotate は daemon ではなくただの command で、
cron により毎日朝 3 時ごろに実行されます。

§ installation

docker 等の場合は CentOS に cron が入っていませんので、
一緒に cronie も入れておきます。

$ sudo yum -y install logrotate cronie

§ settings

cron から logrotate を起動する設定は、
install 時に自動でされていますので不要です。
rotate したいログファイルの設定は自分でする必要があります。

config ファイルの置き場は

/etc/logrotate.d/

です。

ここに置いた設定ファイルが、
毎日 3 時ごろに自動で実行されます。

§ example

例えば /var/log/test.log を rotate したい場合は、
/etc/logrotate.d/test 等とファイルを作成し、
中身は下記のように書きます。

$ cat /etc/logrotate.d/test
/var/log/test.log {       # 👈対象の file path です。 * 等のワイルドカードが使えます。
    missingok             # missing ok 👈対象ファイルがなくても気にしません。
    notifempty            # not if empty 👈空なら何もしません。
    compress              # 👈 gz で圧縮します。
    daily                 # 👈毎日 rotate します。
    rotate 5              # 👈履歴を 5 個保持します。
    dateext               # 👈ファイル名の末尾に日付をつける設定です。
    dateformat _%Y%m%d    # 👈ファイル名の末尾の日付形式をカスタムできます。
    create 0600 root root
}

§ test

example の設定を動作確認します。

¶ make test.log

適当にログファイルを作成します。 お手軽に command history を吐き出しています。

$ history >> /var/log/test.log

何度か実行すると結構な size になると思います。

¶ execute only test.log

logrotate コマンドの引数に設定ファイルを指定すると、
その設定だけ動かすことができます。

$ sudo logrotate /etc/logrotate.d/test

¶ rotate result

以下のように 日付付きで gz に圧縮されて、
test.log 自身は空になっています。

$ sudo ls -la /var/log
-rw------- 1 root root     0 Oct 19 08:51 test.log
-rw------- 1 root root   593 Oct 19 08:13 test.log_20211019.gz

gz で圧縮したファイルは通常の cat コマンドでは中身を見れません。
代わりに zcat コマンドなどで中身を表示できます。

$ sudo zcat test.log_20211019.gz

grep も同様に zgrep で検索できます。

§ sample

¶ asterisk

$ sudo cat /etc/logrotate.d/asterisk
/var/log/asterisk/messages       # 👈 複数指定
/var/log/asterisk/*log {         # 👈 ワイルドカード指定
    missingok
    notifempty
    compress
    daily
    rotate 30
    create 0640 asterisk asterisk
    sharedscripts                # 👈log file が複数あっても最後に一度だけ実行されます。これを書かないと毎度実行されます。
    postrotate
    /usr/sbin/asterisk -rx ‘logger reload’ > /dev/null 2> /dev/null  # 👈 logfile の i-node が変わるので reload させます。
    endscript
}

¶ Apache

$ sudo cat /etc/logrotate.d/httpd 
/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}
CentOS7 に logrotate を設定する。Asterisk の設定例もあり。 2021-10-19 18:31:40

コメントはありません。

4468

お気軽に
お問い合わせください。

お問い合わせ
gomibako@aska-ltd.jp