我正在使用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
可能需要修改,具体取决于您的具体要求和文件的位置。