2014-09-10 55 views
0

我已經安裝了CentOS並安裝了繁忙的網絡服務器。 我需要從日誌文件中獲取統計信息並保留按日期排序的舊統計信息。Logrotate每30秒鐘並將日誌文件存儲在日期命名的目錄中

每隔30秒,應關閉並處理當前日誌文件(分析條目並將其存儲到數據庫中)。由於這會產生大量日誌文件,我想將它們分組到根據日期命名的目錄中。

此刻,我有兩個文件; rotation.conf和rotatenow.sh。 shell文件基於YmdHMS創建目錄。 之後,我運行命令「logrotate ./rotation.conf -v --force」以調用這個過程,但是如何讓配置文件將日誌放入新生成的目錄?整個事情可以在配置文件內完成嗎?

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工具,所以我設法建立一個監聽器:

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

不需要cron:如果你使用TranserLog httpd.conf選項每隔30秒創建一個新的日誌文件,你可以運行一個後處理守護進程,用inotifywait(或Python pyinotify等)。看到這裏:inotify and bash - 這會讓你在創建新文件後很快得到操作系統的通知等。

相關問題