helpful amanda script
Paul Lussier
p.lussier at comcast.net
Tue Aug 22 18:16:01 EDT 2006
Hi all,
Over the past (mumble) years, I've had quite a bit of time to play
with amanda. Occassionally I like to keep tabs on it's progress and
see what's it currently doing:
- what file system is it dumping,
- how many are left
- what tapes have been dumped to and which one is it on now, etc.
All of the questions are easily answered using the amstatus command.
However, when the system is under heavy load, like when it's doing
backups and it's both the network and disk I/O are through the roof,
and the CPU is pegged because it's dealing with compression, this
command can sometimes take a while to return.
This script essentially is an endless loop around the amstatus command
with a 5 minute delay. But it parses the output and displays (what I
consider to be) the most important information.
There's likely lots of room for improvement here, not the least of
which is to determine when (and how) to use a pager (more or less,
etc.) based on the number of rows in current terminal vs. the number
of rows of output.
I'd certainly appreciate some feedback on this if anyone out there
uses amanda and finds this useful and/or wishes to help improve it.
--
Seeya,
Paul
--------------------------------cut here---------------------------------------
#!/bin/sh
# Need to figure out how to conditionally invoke a pager
# based on this data...
#ROWS=`stty size | cut -f1 -d' '`
#COLS=`stty size | cut -f2 -d' '`
DEFAULT='weekly'
CONF=${1:-$DEFAULT}
AMSTAT_CMD="amstatus $CONF"
AMSTAT_FLAGS='--dumping --waitdumping --waittaper --writingtape'
TAPES_CMD=$($AMSTAT_CMD --summary | awk '/^ +tape/ {print}')
TMPFILE="/tmp/stat.$$"
function cleanup {
rm -f $TMPFILE
exit 1;
}
trap cleanup SIGHUP SIGINT SIGTERM
clear
while true
do
estimate=`$AMSTAT_CMD --gestimate | grep -v Using`
if [ "$estimate" != "" ]; then
$AMSTAT_CMD --gestimate | grep -v Using
else
$AMSTAT_CMD $AMSTAT_FLAGS > $TMPFILE
dumping=`egrep 'k (dump|flush)ing' $TMPFILE`
action=`echo $dumping | awk '{print toupper(substr($4,1,1))substr($4,2)}'`
count=`awk '/wait for|waiting to/ {print $1}' $TMPFILE | wc -l`
date
echo ""
if [ ! -z "$dumping" ]; then
echo "$action:"; echo -n " ";
echo $dumping | perl -pe 's/\) (\w)/\)\n\t$1/g;s/dumping//g'
echo ""
fi
echo "Waiting on: $count file systems"
echo ""
if [ $count == 0 ]; then
cleanup
fi
if [ $count > $ROWS ]; then
PAGE="| less -e $PAGER"
fi
egrep -v 'k (dump|flush)ing' $TMPFILE
if [ ! -z $TAPES ]; then
echo "Tapes written to so far:"
$TAPES_CMD
fi
fi
sleep 600
clear
done
More information about the gnhlug-discuss
mailing list