version 1.1, 2010/07/29 14:03:22
|
version 1.4, 2010/08/31 01:55:03
|
Line 1
|
Line 1
|
#!/bin/sh |
#!/bin/sh |
|
|
|
|
# Update all awstats sites there is a config file for |
# Update all awstats sites there is a config file for |
|
# This script runs awstats -update for all sites a config file |
|
# exists in the awstats config dir. It runs the update process in parallel |
|
# for several sites at once. Give the command line argument "-q" to suppress |
|
# all but error output. |
|
|
|
# (c) 2010 under GPL v2 by Adrian Zaugg. |
|
|
|
|
|
# awstats main script |
AWSTATS_BIN="/usr/lib/cgi-bin/awstats.pl" |
AWSTATS_BIN="/usr/lib/cgi-bin/awstats.pl" |
|
|
|
# awstats configuration directory |
CONF_DIR="/etc/awstats" |
CONF_DIR="/etc/awstats" |
CONF_TEMPLATE="awstats.default" |
|
|
# normal awstats config files have this extension |
CONF_EXT="conf" |
CONF_EXT="conf" |
|
|
|
# File to exclude |
|
# Exclude this file, which isn't a config file for awstats, but |
|
# also resides in the config directory. Note: Only |
|
# files with an extension $CONF_EXT are considered anyway. |
|
CONF_TEMPLATE="awstats.default" |
|
|
|
# Run with this priority (0: normal - 19: friendly) |
NICENESS=16 |
NICENESS=16 |
|
|
|
# Maximum awstats update processes to run at once |
MAX_PROCESSES=8 |
MAX_PROCESSES=8 |
# Wait that many seconds when MAX_PROCESSES are COUNT_PROC |
|
|
# Wait that many seconds when MAX_PROCESSES are running |
# to retry starting new update processes |
# to retry starting new update processes |
RETRY=2 |
RETRY=2 |
|
|
Line 20 RETRY=2
|
Line 40 RETRY=2
|
|
|
# default to babbly, -q suppress output |
# default to babbly, -q suppress output |
SPEAK=true |
SPEAK=true |
|
|
if [ "$1" = "-q" ]; then |
if [ "$1" = "-q" ]; then |
SPEAK=false |
SPEAK=false |
fi |
fi |
|
|
function count_proc() { |
function count_proc() { |
# count how many instances are already COUNT_PROC |
# count how many instances are already running |
COUNT_PROC=$(ps -o command -u "$(id -u)" | egrep -cwe '^(/bin/sh|/usr/bin/perl)* *'"$AWSTATS_BIN") |
COUNT_PROC=$(ps -o command -u "$(id -u)" | egrep -cwe '^(/bin/sh|/usr/bin/perl)* *'"$AWSTATS_BIN") |
} |
} |
|
|
Line 47 CURRENT_DIR="$(pwd)"
|
Line 66 CURRENT_DIR="$(pwd)"
|
cd "$CONF_DIR" |
cd "$CONF_DIR" |
for conf in *.$CONF_EXT; do |
for conf in *.$CONF_EXT; do |
|
|
notstarted=true |
notstarted=true |
|
|
# control number uf update processes |
# control number uf update processes |
while [ $notstarted = true ]; do |
while [ $notstarted = true ]; do |
count_proc |
count_proc |
if [ $COUNT_PROC -lt $MAX_PROCESSES ]; then |
if [ $COUNT_PROC -lt $MAX_PROCESSES ]; then |
# exclude the template file |
# exclude the template file |
if [ "$conf" != "$CONF_TEMPLATE" ]; then |
if [ "$conf" != "$CONF_TEMPLATE" ]; then |
site="$(echo "$conf" | sed -e "s/^awstats\.\(.*\)\.conf$/\1/")" |
site="$(echo "$conf" | sed -e "s/^awstats\.\(.*\)\.conf$/\1/")" |
$SPEAK && echo "`date "+%Y-%m-%d %H:%M:%S"`: Starting update for $site (already running: $COUNT_PROC)." |
$SPEAK && echo "`date "+%Y-%m-%d %H:%M:%S"`: Starting update for $site (already running: $COUNT_PROC)." |
do_update |
do_update |
fi |
fi |
notstarted=false |
notstarted=false |
let "site_count += 1" |
let "site_count += 1" |
break; |
break; |
fi |
fi |
|
|
sleep "$RETRY" |
sleep "$RETRY" |
done |
done |
|
|
done |
done |
cd "$CURRENT_DIR" |
cd "$CURRENT_DIR" |
|
|
|
|
# wait for all processes to finish |
# wait for all processes to finish |
count_proc |
count_proc |
if [ $COUNT_PROC -gt 0 ]; then |
if [ $COUNT_PROC -gt 0 ]; then |
$SPEAK && echo "`date "+%Y-%m-%d %H:%M:%S"`: All jobs started - $COUNT_PROC process(es) still runnning. Waiting..." |
$SPEAK && echo "`date "+%Y-%m-%d %H:%M:%S"`: All jobs started - $COUNT_PROC process(es) still runnning. Waiting..." |
|
|
# wait for processes to finish |
# wait for processes to finish |
while [ $COUNT_PROC -gt 0 ]; do |
while [ $COUNT_PROC -gt 0 ]; do |
sleep "$RETRY" |
sleep "$RETRY" |
count_proc |
count_proc |
done |
done |
fi |
fi |
|
|
$SPEAK && echo "`date "+%Y-%m-%d %H:%M:%S"`: Finished. Statistics for $site_count sites updated." |
$SPEAK && echo "`date "+%Y-%m-%d %H:%M:%S"`: Finished. Statistics for $site_count sites updated." |