Help us understand the problem. What is going on with this article?

logrotateの設定ファイル、オーナーが重要

結論

/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.g

/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

以上のようなエラーが出ます。

abetomo
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away