压缩所有没有任何符号链接指向他们的Apache日志文件

  • 我使用cronolog让apache日志文件旋转。
  • 我正在使用fail2ban监视这些日志文件,并禁止滥用。

  • 总是有一个由cronolog创build并指向当前日志文件的access.log符号链接。

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

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

问题是,对于stream量低的网站, access.log符号链接现在已经死了,因为它指向的文件已经被gzip重命名了。 结果是fail2ban放弃了那些监狱,因为它不能再统计文件了。

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

我发现自己是这样做的一种方式,它的工作,但我想知道是否有一个更简单的方法来做,因为这是一个非常复杂,并不是很快( find一个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 {} \; 

可能是这样的:

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

用于$(查找$ LOGDIR -type f -name \ * .log)中的日志文件
做
  如果[“$ logfile”!=“$ LOGDIR / $ CURRENT”]
  然后
     gzip $ logfile
  科幻
 DONE

可能需要修改,具体取决于您的具体要求和文件的位置。