我logrotate
使用脚本运行 cron
[alex@leia ~]$ cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf >/dev/null
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
根据系统日志,它应该可以工作:
Dec 14 03:21:01 leia run-parts(/etc/cron.daily)[3041]: starting logrotate
Dec 14 03:21:01 leia run-parts(/etc/cron.daily)[3063]: finished logrotate
我希望这也能运行以下指令:
[alex@leia ~]$ cat /etc/logrotate.d/www-data_uwsgi_nginx
/home/www-data/*/logs/*/*log {
rotate 5
size 20M
nocompress
missingok
postrotate
touch /tmp/uwsgi-reload
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
sharedscripts
}
但!它不会轮换/home/www-data
. 其他日志被轮换。如果我logrotate
手动运行
[alex@leia ~]$ sudo logrotate /etc/logrotate.conf
它确实会旋转有问题的日志。
我看到了 SELinux 问题所在的相关问题,并尝试了该解决方案,但对我的情况没有帮助。
编辑:根据要求,内容/etc/logrotate.conf
:
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
我在#centos 中寻求帮助,看来 SELinux 是问题所在。根据
aureport -a
SELinux 的说法,在logrotate_t
上下文中运行的进程拒绝访问具有user_home_t
标签的主目录中的文件——一旦你知道 SELinux 是如何工作的,这并不奇怪!我决定只重新标记日志文件的目录(尾随
.*
使修改递归):我选择了这个
var_log_t
标签,因为它有点意思,而且它恰好是我知道应该工作的标签。我想使用一个更有意义的标签,但我不知道如何列出有效的标签。或许可以制定一项新政策,但对于我的目的而言,这似乎有点过头了。我将不得不等待几天,然后看看它是否有效,但我怀疑它会!
编辑:它就像一个魅力!我现在很高兴。