每隔30秒进行一次Logrotate,并将日志文件存储在以日期命名的目录中

时间:2014-09-10 18:52:03

标签: linux shell logrotate

我有一个繁忙的网络服务器的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

我想,我可以从这里处理它。谢谢你,约翰

1 个答案:

答案 0 :(得分:1)

不需要cron:如果您使用TranserLog httpd.conf选项每30秒创建一个新的日志文件,您可以运行一个后处理守护程序,它使用inotifywait(或Python的pyinotify)监视输出目录等)。请参阅此处:inotify and bash - 这将使您在创建新文件后很快得到操作系统的通知。