logrotate cron 作业不轮换某些日志

logrotate cron 作业不轮换某些日志

我在“logrotate.d”目录中添加了两个脚本,用于轮换我的应用程序日志。这是其中一个脚本的配置:

<myLogFilePath> {
  compress
  copytruncate
  delaycompress
  dateext
  missingok
  notifempty
  daily
  rotate 30
}

“cron.daily”目录中有一个“logrotate”脚本(根据 cron 日志,它似乎每天运行):

#!/bin/sh

echo "logrotate_test" >>/tmp/logrotate_test
#/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
/usr/sbin/logrotate -v /etc/logrotate.conf &>>/root/logrotate_error

EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

第一个 echo 语句正在起作用。
但我发现我的应用程序日志本身没有被轮换,而其他日志(如 httpd)却被轮换了**
**而且我也没有在提到的“logrotate_error”文件中看到任何输出
(所有用户都有写权限)。

然而系统日志显示:“logrotate:ALERT 因 [1] 异常退出”

但是当我手动运行“cron.daily”脚本中的相同“logrotate”时,一切似乎都运行正常。

为什么它不在每日 cron 计划中轮换?我在这里做错了什么吗?
如果我能得到如此急需的帮助,那就太好了。

更新: 看起来,这是因为 selinux - 我的用户主目录中的日志文件受到 selinux 和运行 logrotate 脚本时施加的限制:

SELinux is preventing /usr/sbin/logrotate from getattr access on the file /home/user/logs/application.log

答案1

SELinux 限制了对没有所需 SELinux 文件上下文类型的目录中的日志文件进行 logrotate 的访问。“/var/log”目录有“var_log_t”文件上下文,logrotate 能够完成所需的操作。因此,解决方案是在我的应用程序日志文件及其父目录中进行以下设置:

semanage fcontext -a -t var_log_t <directory/logfile>
restorecon -v <directory/logfile>

相关内容