結論
/etc/logrotate.d/
以下に置いてあるlogrotateの設定ファイル。
root:root
の持ち物にしていることが多いです。
これを、root:root
以外(例えば ubuntu:ubuntu
) の持ち物にしたりすると、logrotateが動かなくなるので注意です。
環境
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS
準備
確認用にログを出しておく
$ while true; do date >> /home/ubuntu/a.log && sleep 1; done &
logrotateのcron設定をhourlyにコピー
$ sudo cp -p /etc/cron.daily/logrotate /etc/cron.hourly/
$ ls -lh /etc/cron.hourly/
total 4.0K
-rwxr-xr-x 1 root root 372 May 6 2015 logrotate
logrotateの設定しかないので、あとの確認がやりやすくなります。
logrotateの設定
$ cat /etc/logrotate.d/test
/home/ubuntu/a.log {
hourly
rotate 5
missingok
notifempty
compress
delaycompress
copytruncate
su ubuntu ubuntu
}
確認
設定ファイルが root:root
の持ち物
$ ls -lh /etc/logrotate.d/test
-rw-r--r-- 1 root root 145 Apr 19 09:42 /etc/logrotate.d/test
logファイル
$ ls -lh /home/ubuntu/a.log*
-rw-rw-r-- 1 ubuntu ubuntu 2.3K Apr 19 09:46 /home/ubuntu/a.log
/etc/crontab
に書いてある run-parts
実行
$ sudo run-parts --report /etc/cron.hourly
ロテートされた
$ ls -lh /home/ubuntu/a.log*
-rw-rw-r-- 1 ubuntu ubuntu 0 Apr 19 09:48 /home/ubuntu/a.log
-rw-rw-r-- 1 ubuntu ubuntu 2.7K Apr 19 09:48 /home/ubuntu/a.log.1
(/var/lib/logrotate/status
を書き換えてロテートされるようにして)もう一回 run-parts
実行するとロテートされる
$ sudo run-parts --report /etc/cron.hourly
$ ls -lh /home/ubuntu/a.log*
-rw-rw-r-- 1 ubuntu ubuntu 0 Apr 19 09:49 /home/ubuntu/a.log
-rw-rw-r-- 1 ubuntu ubuntu 203 Apr 19 09:49 /home/ubuntu/a.log.1
-rw-rw-r-- 1 ubuntu ubuntu 253 Apr 19 09:48 /home/ubuntu/a.log.2.gz
設定ファイルを ubuntu:ubuntu
の持ち物に変えて同じ確認
$ sudo chown ubuntu:ubuntu /etc/logrotate.d/test
$ ls -lh /etc/logrotate.d/test
-rw-r--r-- 1 ubuntu ubuntu 145 Apr 19 09:42 /etc/logrotate.d/test
logファイル
$ ls -lh /home/ubuntu/a.log*
-rw-rw-r-- 1 ubuntu ubuntu 406 Apr 19 09:51 /home/ubuntu/a.log
-rw-rw-r-- 1 ubuntu ubuntu 203 Apr 19 09:49 /home/ubuntu/a.log.1
-rw-rw-r-- 1 ubuntu ubuntu 253 Apr 19 09:48 /home/ubuntu/a.log.2.gz
(/var/lib/logrotate/status
を書き換えてロテートされるようにして)run-parts
実行
$ date
Thu Apr 19 09:52:52 UTC 2018
$ grep '/home/ubuntu' /var/lib/logrotate/status
"/home/ubuntu/a.log" 2018-4-19-8:49:27
$ sudo run-parts --report /etc/cron.hourly
ロテートされない
$ ls -lh /home/ubuntu/a.log*
-rw-rw-r-- 1 ubuntu ubuntu 812 Apr 19 09:54 /home/ubuntu/a.log
-rw-rw-r-- 1 ubuntu ubuntu 203 Apr 19 09:49 /home/ubuntu/a.log.1
-rw-rw-r-- 1 ubuntu ubuntu 253 Apr 19 09:48 /home/ubuntu/a.log.2.gz
statusも更新されない
$ grep '/home/ubuntu' /var/lib/logrotate/status
"/home/ubuntu/a.log" 2018-4-19-8:49:27
$ date
Thu Apr 19 09:54:18 UTC 2018
もう一回 run-parts
実行
$ sudo run-parts --report /etc/cron.hourly
やっぱりロテートされない
$ ls -lh /home/ubuntu/a.log*
-rw-rw-r-- 1 ubuntu ubuntu 1.1K Apr 19 09:55 /home/ubuntu/a.log
-rw-rw-r-- 1 ubuntu ubuntu 203 Apr 19 09:49 /home/ubuntu/a.log.1
-rw-rw-r-- 1 ubuntu ubuntu 253 Apr 19 09:48 /home/ubuntu/a.log.2.gz
設定ファイルを root:root
の持ち物に戻して確認
$ sudo chown root:root /etc/logrotate.d/test
$ ls -lh /etc/logrotate.d/test
-rw-r--r-- 1 root root 145 Apr 19 09:42 /etc/logrotate.d/test
状況確認
$ date
Thu Apr 19 09:57:16 UTC 2018
$ grep '/home/ubuntu' /var/lib/logrotate/status
"/home/ubuntu/a.log" 2018-4-19-8:49:27
$ ls -lh /home/ubuntu/a.log*
-rw-rw-r-- 1 ubuntu ubuntu 1.4K Apr 19 09:57 /home/ubuntu/a.log
-rw-rw-r-- 1 ubuntu ubuntu 203 Apr 19 09:49 /home/ubuntu/a.log.1
-rw-rw-r-- 1 ubuntu ubuntu 253 Apr 19 09:48 /home/ubuntu/a.log.2.gz
run-parts
実行
$ sudo run-parts --report /etc/cron.hourly
ロテートされた
$ ls -lh /home/ubuntu/a.log*
-rw-rw-r-- 1 ubuntu ubuntu 29 Apr 19 09:57 /home/ubuntu/a.log
-rw-rw-r-- 1 ubuntu ubuntu 1.5K Apr 19 09:57 /home/ubuntu/a.log.1
-rw-rw-r-- 1 ubuntu ubuntu 72 Apr 19 09:49 /home/ubuntu/a.log.2.gz
-rw-rw-r-- 1 ubuntu ubuntu 253 Apr 19 09:48 /home/ubuntu/a.log.3.gz
まとめ
/etc/logrotate.d/
以下に置いてあるlogrotateの設定ファイルは root:root
の持ち物にしておこう!
補足
事前に確認しておけばちゃんとエラーが出る
rootのとき
$ ls -lh /etc/logrotate.d/test
-rw-r--r-- 1 root root 145 Apr 19 09:42 /etc/logrotate.d/test
$ sudo logrotate -d /etc/logrotate.d/test
reading config file /etc/logrotate.d/test
Handling 1 logs
rotating pattern: /home/ubuntu/a.log hourly (5 rotations)
empty log files are not rotated, old logs are removed
switching euid to 1000 and egid to 1000
considering log /home/ubuntu/a.log
log does not need rotating
switching euid to 0 and egid to 0
それ以外
$ ls -lh /etc/logrotate.d/test
-rw-r--r-- 1 ubuntu ubuntu 145 Apr 19 09:42 /etc/logrotate.d/test
$ sudo logrotate -d /etc/logrotate.d/test
Ignoring /etc/logrotate.d/test because the file owner is wrong (should be root).
Handling 0 logs
補足2(追記)
設定ファイルのmodeも重要
644
でないと
Ignoring /etc/logrotate.d/test because of bad file mode.
Handling 0 logs
OR
error: Ignoring /etc/logrotate.d/test because of bad file mode - must be 0644 or 0444.
以上のようなエラーが出ます。
(補足2の補足: 640
でも大丈夫そうだった。)