压缩所有没有指向它们的符号链接的 apache 日志文件

压缩所有没有指向它们的符号链接的 apache 日志文件
  • 我正在使用 cronolog 来让 apache 日志文件轮换。
  • 我正在使用 fail2ban 来监控这些日志文件,并在发生滥用行为时禁止。

  • 总有一个访问日志由 cronolog 创建的符号链接,指向当前日志文件。

  • 每天晚上,我都会运行一个 cron 来压缩昨天的日志文件:

    find /var/log/apache2/ -daystart -mtime +0 \( -name "*access*.log" -or -name "*error*.log" \) -type f -exec gzip {} \;
    

问题是,对于流量较低的网站,访问日志symlink 现在已失效,因为它指向的文件已被重命名gzip。结果是 fail2ban 放弃了这些 jail,因为它无法再保存文件。

解决方案是仅压缩没有符号链接指向的日志文件。

我找到了一种这样做的方法,并且它有效,但我想知道是否有更简单的方法,因为这个方法真的很复杂,而且不是很快(afind中的a find)。

    find /var/log/apache2/ -daystart -mtime +0 \( -name "*access*.log" -or -name "*error*.log" \) -type f -exec sh -c 'test `find /var/log/apache2/ -lname {} | wc -l` -eq 0' \; -exec gzip {} \;

答案1

可能是这样的:

LOGDIR=/路径/到/日志/文件
CURRENT=$(stat -c "%N" $LOGDIR/access.log | sed -e "s/.* -> //" -e "s/[\`']//g")

对于 $(find $LOGDIR -type f -name \*.log) 中的日志文件
  如果 [ “$logfile” != “$LOGDIR/$CURRENT” ]
  然后
    gzip $日志文件
完毕

可能需要根据您的具体要求和文件位置进行修改。

相关内容