Squid 生成用户访问站点的日志。我想删除 中/var/squid/logs/access.log
超过 6 个月的条目。
我每周都会执行该脚本。我想到过 Perl 脚本或类似的脚本。
其外观如下access.log
:
条目的生成方式如下:
IP - - [15/Oct/2011:02:04:32 -400]
答案1
此问题的通常解决方案是使用旋转日志文件,以便当前日志文件仅包含当前条目,而不是从文件中删除过时的条目。
这一切都由logrotate
程序处理。以下配置应该大致满足您的要求。它将保留最近 6 个月的日志条目/var/squid/logs/access.log
,每周轮换文件。
/var/squid/logs/access.log {
weekly
rotate 26
missingok
nocreate
sharedscripts
postrotate
test ! -e /var/run/squid.pid || /usr/sbin/squid -k rotate
endscript
}
如果您确实关心日志文件中的数据,则不应修改它们。
答案2
解决方案与newsyslog
:
# logfile [owner:group] mode count when flags
/var/squid/logs/access.log root 644 26 $W0D0 JN
日志文件在被删除之前将轮换 26 次。$W0D0
表示我会在每周日一点轮换0:00
。
该标志J
指示 newsyslog 应使用 压缩旋转文件bzip2
。
该标志N
表明没有需要发出信号的进程。