logging - logrotate cron 作业不旋转某些日志

标签 logging cron cron-task logrotate log-rotation

我在“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

最佳答案

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

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

关于logging - logrotate cron 作业不旋转某些日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15652654/

相关文章:

python - 目录 : Is a directory

bash - 如何每小时运行一个bash脚本以及如何在云桌面上杀死它?

elixir - Cron 任务量子 Elixir

ios - print - 后台或主线程操作

linux - 如何仅根据文件大小进行 logrotate?

c# - 为什么记录器建议每个类(class)使用一个记录器?

tomcat - 通过cron重启tomcat的问题

security - 如何安全转移

java - 如何禁用 openJdk 11 java.net.http.HttpClient 日志记录?

hadoop - crontab 作业未执行