我试图找出导致anacron
向我发送以下错误消息的原因:
/etc/cron.daily/logrotate:
/var/log/mariadb/mariadb.log-20140710.gz: Permission denied
error: error running last action script for /var/log/mariadb/*.log
这些是相关配置:
# /etc/cron.d
01 * * * * root run-parts /etc/cron.hourly
------------------------------------------
# /etc/cron.hourly/0anacron
...
/usr/sbin/anacron -s
------------------------------------------
# /etc/anacrontab
...
1 5 cron.daily nice run-parts /etc/cron.daily
------------------------------------------
# /etc/cron.daily/logrotate
/usr/sbin/logrotate /etc/logrotate.conf
...
------------------------------------------
# /etc/logrotate.conf
...
include /etc/logrotate.d
...
这是有问题的主要配置:
# /etc/logrotate.d/mariadb
/var/log/mariadb/*.log {
create 640 mysql mysql
missingok
sharedscripts
nodelaycompress
postrotate
.....
lastaction
dir="/var/log/mariadb/"
today=$(date -u +%Y%m%d)
attach1=$(ls -t1 ${dir}mariadb*gz 2>&1 head -1 | grep $today)
....
attachment=""
totalsize=0
if [[ $attach1 ]]; then
attachment+=" -a $attach1"
totalsize=$((totalsize + $(stat -c %s $attach1)))
fi
....
endscript
}
当我在命令行上测试上述内容时# logrotate -f /etc/logrotate.conf
,没有错误。但是当 anacron 运行它时,它会出现权限被拒绝的错误,如上所示。我猜测该错误是在运行stat
命令时生成的。
我对相关文件有以下权限设置
-rw-r-----. mysql mysql system_u:object_r:mysqld_log_t:s0 mariadb.log-20140711.gz
SELinux 上下文对我来说看起来很好,并且我在日志日志中没有看到任何 avc 错误,因此这不应该是由于 SELinux 造成的。另外, from cron.d
,run-parts
是以 root 用户身份执行的,所以不应该存在权限问题。
我读过这个问题其中建议是要做的strace
。但我没有strace
,也不被允许安装。有谁可以告诉我是什么导致了权限错误?
答案1
刚刚用蛤蜊经历了这个。确保运行 logrotate 的用户有权写入 /var/log/mariadb。
尝试在配置指令的顶部使用 su root root。