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.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` でも大丈夫そうだった。）