|
This script is used to generate Webalizer logfiles for multiple Vhosts. The logic for this one is I keep all my vhosts under /www and I only generate logs for vhosts that are in the form of domain.com. So the script just gets a list of valid directories and then reads their log files. I run it once per day but it can be run more often, one client wanted it run every hour.
#!/usr/bin/perl
########################################
# Webalizer nightly cron script
# This script will rotate the log files weekly
#
# Author: Mike Tremaine
# Written: Feb 18th 2004
#########################################
use strict;
use File::Copy;
my $LOG_DIR = "/var/apache2/logs/";
my $LOG_OUTPUT = "/www/stellarcore.net/securedoc/logs"
my $ARCHIVE_DIR = "/var/apache2/logs/Archives";
my $WWW_DIR = "/www";
my $WEBALIZER = "/usr/local/bin/webalizer";
#############################
#Make pretty timestamp
############################
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year = ($year + 1900);
$mon++;
if ($mon < 10) {$mon = "0$mon"};
if ($mday < 10) {$mday = "0$mday"};
if ($hour < 10) {$hour = "0$hour"};
my $timestamp = "$mon" . "-$mday" . "-$year";
#############################
#Open WWW_DIR and get list of sites
#############################
opendir(DIR, "$WWW_DIR") || die "Can not open DIR $!\n";
my @sites = (grep(/\.\w+$/, readdir(DIR)));
closedir(DIR) || die "Can not close DIR $!\n";
##############################
#MAIN LOOP for each hostname
##############################
foreach my $hostname (@sites) {
###############################
# Run WEBALIZER if stats dir and logfile exist
###############################
if ( (-e "$LOG_OUTPUT/$hostname") && (-e "$LOG_DIR/$hostname-access_logs") ) {
system ("$WEBALIZER -u *.gif -u *.jpeg -u *.jpg -C 10 -R 10 -S 10 -N 10
-D /tmp/webalizer.cache -o $LOG_OUTPUT/$hostname
-p -n $hostname $LOG_DIR/$hostname-access_logs");
} #End if sanity check
###############################
#Check date if sunday at 1am lets roll the logs
###############################
if ( ( $wday == 0 ) && (-e "$LOG_DIR/$hostname-access_logs") && (-e "$ARCHIVE_DIR") ) {
#Copy LogFile to archive dir and timestamp it
copy ("$LOG_DIR/$hostname-access_logs", "$ARCHIVE_DIR/$hostname-$timestamp")
|| die "Can't copy $hostname logs $!\n";
#Then throw a destructive open at the log
open (NEWFILE, ">$LOG_DIR/$hostname-access_logs")
|| die "Can't open $hostname logfile to destroy $!\n";
close (NEWFILE);
}
} #End MAIN LOOP for $hostname
exit;
|