logrotate と cron を利用し、ずっとサイズが増えていくログファイルのローテーションする方法
目次
1. 構築要件
/opt/aem/author/crx-quickstart/logs 配下のログファイル stdout.log がずっとサイズが増えていくため、定期的にログローテーションする方法を紹介します。
- 実行頻度:毎日 02:00 に実行します。
- 実行内容(その1):ログファイルを前日の日付付けてリネームします。(例:stdout.log ⇒ stdout.log.2020-09-10 ※現在日付:2020-09-11)
- 実行内容(その2):7日前のログファイルを削除します。(常に7世代(7日)分のログファイルを残す)
2. logrotate と cron のインストール
2.1 logrotate のインストール
- logrotate のインストールを確認します。
$ yum list installed | grep logrotate logrotate.x86_64 3.8.6-15.amzn2 installed
- logrotate がインストールされていない場合は、インストールします。
$ yum install -y logrotate
2.2 cron のインストール
- cron のインストールを確認します。
$ yum list installed | grep cron cronie.x86_64 1.4.11-23.amzn2 installed cronie-anacron.x86_64 1.4.11-23.amzn2 installed crontabs.noarch 1.11-6.20121102git.amzn2 installed
- cronインストールされていない場合は、インストールします。
$ yum install -y cron
- cronサービスの起動状態確認
$ systemctl status crond.service ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-06-17 18:04:31 JST; 2 months 21 days ago Main PID: 2476 (crond) CGroup: /system.slice/crond.service mq2476 /usr/sbin/crond -n
- cronサービスが起動開始していない場合、起動します。
$ systemctl start crond.service
3. cron ジョブで logrotate の実行設定
CentOS7では、指定する日時に cron ジョブを実行するため、crontab の設定ファイル「etc/crontab」の最後に、行を追記します。
3.1 crontab の設定
$ vi /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed # Run every day at 02:00 0 2 * * * root run-parts /etc/cron.weekly # ↑ 毎日02:00に、/etc/cron.weeklyフォルダのlogrotateを実行します。
3.2 /etc/cron.weekly の設定
- /etc/cron.dailyフォルダ から logrotateファイル を /etc/cron.weekly フォルダにコピーします。
$ cp /etc/cron.daily/logrotate /etc/cron.weekly/ $ ls -l /etc/cron.weekly -rwx------ 1 root root 222 Sep 7 15:30 logrotate
- logrotateファイルの中身は下記のように編集します。
$ vi /etc/cron.weekly/logrotate #!/bin/sh /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status -f /etc/logrotate.conf EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0
3.3 ログローテーションの設定ファイル /etc/logrotate.conf の設定
- バックアップしてから、中身を下記のように編集します。
$ cp /etc/logrotate.conf /etc/logrotate.conf.bk $ vi /etc/logrotate.conf # see "man logrotate" for details # 設定された世代分のログを保管します。 /opt/aem/author/crx-quickstart/logs/stdout.log { daily missingok nocompress create 0644 aem-user aem-group ifempty rotate 7 dateext dateyesterday dateformat .%Y-%m-%d su aem-user aem-group } # system-specific logs may be also be configured here.
3.4 cronサービスの再起動
$ systemctl restart crond.service # 再びcronの動作確認 $ systemctl status crond.service
ここまで、ログローテーションの設定が全て完了。
4.ログローテーションの動作確認
- cronログからcronジョブが正常に稼働することを確認します。
$ tail -f /var/log/cron
- ローテーション情報から確認します。
$ cat /var/lib/logrotate/logrotate.status logrotate state -- version 2 "/plus/author/crx-quickstart/logs/stdout.log" 2020-9-11-18:9:48
7日後、毎日ログローテーション実施により、対象フォルダに下記のファイルが残っています。