LoginSignup
14
18

More than 1 year has passed since last update.

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

Last updated at Posted at 2018-04-19

結論

/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 でも大丈夫そうだった。)

14
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
18