最近、logrotate
がログをローテーションしないことに気付きました。
user1@Host:~$ /usr/sbin/logrotate /home/user1/logrotate.conf -v
はエラーを出します:
error: error setting owner of /home/logs/mylog.log.1 to uid 10111 and gid 10111:
Operation not permitted
error: error creating output file /var/lib/logrotate/status.tmp:
Permission denied
gid
は私を混乱させます。user1
は異なるgid
を持つグループのメンバーにすぎないためです:
user1@Host:~$ id
uid=10111(user1) gid=1001(mygroup) groups=1001(mygroup)
ただし、user1
という別のグループがありますが、前述したように、実際のユーザーuser1
はそのメンバーではありません。
user1@Host:~$ cat /etc/group | grep user1
user1:x:10111
ここでは簡単なことですが、見えません。
更新:logrotate.confは次のようになります。
/home/logs/*.log { rotate 7 daily copytruncate compress notifempty }
user1@Host:~$ ls -al /home/logs/ -rw-r--r-- 1 user1 mygroup 190826983 Dec 18 06:05 mylog.log
Logrotates create
ディレクティブを使用して、新しく作成されたログファイルの権限を設定してみてください。それを使用するには
/home/logs/*.log {
rotate 7
daily
create 0777 user1 user1
^^^^^^^^^^^^^^^^^^^^^^
copytruncate
compress
notifempty
}
man logrotate
から
create mode owner group, create owner group
ローテーションの直後(ポストローテーションスクリプトが実行される前)に、ログファイルが作成されます(ローテーションしたばかりのログファイルと同じ名前で)。 modeはログファイルのモードを8進数(chmod(2)と同じ)で指定し、ownerはログファイルを所有するユーザー名を指定し、groupはログファイルが属するグループを指定します。ログファイルの属性はいずれも省略できます。その場合、新しいファイルの属性は、省略された属性の元のログファイルと同じ値を使用します。このオプションは、nocreateオプションを使用して無効にできます。