logrotateはログの世代管理(ログローテート)をするソフトウェアです。
Redhat系のOSには標準で入ってますのでいつも使用しているAmazonLinuxにも入ってます。
今回はlogrotateの設定確認と対象ファイルを追加を行います。
まずはlogrotateが入っているか確認します。
$ rpm -qa | grep logrotate logrotate-3.7.8-26.14.amzn1.x86_64
続いて対象ファイルの追加です。
/etc/logrotate.dの中に設定ファイルを追加することでログローテートの対象を増やすことができます。
AmazonLinuxのデフォルトではApacheやMySQLのログ等、システム以外にも設定がされています。
$ cd /etc/logrotate.d $ ll total 24 -rw-r--r--. 1 root root 139 Jul 24 2015 dracut -rw-r--r-- 1 root root 185 Feb 4 2016 httpd -rw-r--r-- 1 root root 871 Mar 23 2016 mysqld -rw-r--r--. 1 root root 329 Jul 17 2012 psacct -rw-r--r--. 1 root root 210 Dec 10 2014 syslog -rw-r--r--. 1 root root 87 Jul 24 2015 yum
今回はjbossのログファイルを例としファイルを追加します。
$ vi /etc/logrotate.d/jbosslog
下記のようにログファイルのファイルパスを記述します。
また、「rotate」の項目で何世代まで管理するか指定ができます。
既に他のファイルが配置されているのでそれを参考にしてファイルを記述すれば簡単です。
/var/log/jboss_access.log /var/log/server.log /var/log/jboss_boot.log /var/log/jboss_console.log /var/log/app_access.log { daily rotate 10 missingok copytruncate dateext sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }
これだけ設定が完了します。
ログローテートの時間になれば実施されます。
ここから念のためログローテートの時間を確認します。
デフォルトではログローテートはanacronの日時処理に登録されています。
本当にそうなっているかanacronの設定を確認します。
$ vi cat /etc/anacrontab
下記の結果を見ての通り、anacronは1~5時に動作します。
# /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # the maximal random delay added to the base delay of the jobs RANDOM_DELAY=45 # the jobs will be started during the following hours only START_HOURS_RANGE=0-5 #period in days delay in minutes job-identifier command 1 5 cron.daily nice run-parts /etc/cron.daily 7 25 cron.weekly nice run-parts /etc/cron.weekly @monthly 45 cron.monthly nice run-parts /etc/cron.monthly
日時で動くanacronの設定にlogrotateがあることを確認します。
$ cd /etc/cron.daily $ ll 合計 12 -rwxr-xr-x 1 root root 196 12月 26 11:35 logrotate -rwxr-xr-x 1 root root 618 8月 28 2014 man-db.cron -rwxr-xr-x 1 root root 386 12月 26 11:35 tmpwatch
ファイルがあればlogrotateがanacronに設定されています。
また、logrotateはテスト実行することができます。
下記のコマンドを使用することで強制的にログローテートを実行できます。
$ logrotate -d /etc/logrotate.d/jboss
ただし、当日のログローテートが既に実施されてた場合は何も起こりません。
ログローテートの状況はlogrotate.statusに記述されています。
$ vi /var/lib/logrotate.status
logrotate state -- version 2 "/var/log/yum.log" 2017-1-14 "/var/log/server.log" 2017-1-31 "/var/log/dracut.log" 2016-12-26 "/var/log/httpd/*log" 2017-1-14 "/var/log/wtmp" 2016-12-26 "/var/log/spooler" 2017-1-31 "/var/log/app_access.log" 2017-1-31 "/var/log/btmp" 2017-1-14 "/var/log/maillog" 2017-1-31 "/var/log/maintenance.log" 2017-1-31 "/var/log/jboss_console.log" 2017-1-31 "/var/log/jboss_access.log" 2017-1-31 "/var/log/jboss_boot.log" 2017-1-31 "/var/log/secure" 2017-1-31 "/var/log/messages" 2017-1-31 "/var/log/cron" 2017-1-31 "/var/account/pacct" 2016-12-26
このファイルには最後にログローテートを実施した日付が記述されています。
このファイルを編集することでログローテートを再実施することができる。
ちなみに「-f」オプションを使用することでも強制的に実施することができます。
AWSのAmazonLinuxとGMOConoHaのCentOS6でログローテートの設定を確認したところ、両方ともlogrotateが標準で設定されていました。
logrotateはLinuxの基本的なソフトウェアです。