我有一个繁忙的网络服务器的CentOS安装。 我需要从日志文件中获取统计信息并保留旧日期,按日期排序。
每隔30秒,应关闭并处理当前日志文件(分析条目并将其存储到数据库中)。由于这会生成大量日志文件,因此我想将它们分组到以date命名的目录中。
目前,我有两个档案; rotation.conf和rotatenow.sh。 shell文件基于YmdHMS创建目录。 之后,我运行命令“logrotate ./rotation.conf -v --force”以调用进程,但是如何让config-file将日志放入新生成的目录中?整个事情可以在配置文件中完成吗?
now="$(date)"
now="$(date +'%Y-%m-%d-%H:%M:%S')"
foldernavn="/var/www/html/stats/logs/nmdstats/closed/$now"
mkdir $foldernavn
logrotate ./nmdhosting.conf -v --force
目前,配置文件如下所示:
/var/www/html/stats/logs/nmdhosting/access_log {
ifempty
missingok
(I am stuck)
(do some post-processing - run a Perl-script)
}
任何想法都会受到高度赞赏。
更新:我尝试了另一种方法,将其添加到httpd.conf中:
TransferLog "|usr/sbin/rotatelogs /var/www/html/stats/logs/nmdstats/closed/activity_log.%Y%m%d%H%M%S 30".
它有效,但显然,使用此方法时无法运行前/后处理脚本。这对于更新数据库至关重要。我也许可以使用cronjob运行shell / Perl脚本,但我不相信这种方法。搜索继续......
更新2: 我也测试了cronolog但是 - 对于我的项目 - 所需的功能还没有实现,但是还在进行中。由于最新版本是从2002年开始的,我不打算等待它发生:)
但是,我没有意识到inotify-tools,所以我设法建立了一个监听器:
srcdir="/var/www/html/stats/logs/nmdstats/history/"
inotifywait -m -e create $srcdir |
while read filename eventlist eventfile
do
echo "This logfile has just been closed: $eventfile"
done
我想,我可以从这里处理它。谢谢你,约翰
答案 0 :(得分:1)
不需要cron:如果您使用TranserLog httpd.conf选项每30秒创建一个新的日志文件,您可以运行一个后处理守护程序,它使用inotifywait
(或Python的pyinotify)监视输出目录等)。请参阅此处:inotify and bash - 这将使您在创建新文件后很快得到操作系统的通知。