Hi,
on 12 Apr 2001 I posted a script "trim_wtmp" to this list.
I was recently reminded that it had a few misfeatures,
which (presumably) have been fixed now.
I have attached version 2.0.
Regards,
Maarten
#!/bin/sh
# _at_(#)$Id: trim_wtmp 2.0 2001/12/20 litmaath_at_fnal.gov $
#
# trim_wtmp - keep wtmp files at reasonable lengths
#
# example crontab entry:
#
# 25 5 * * * /usr/local/adm/trim_wtmp -k 40000
#
PATH=/bin:$PATH
export PATH
usage()
{
echo "Usage: $0 [-k entries_kept] [-f]" >&2
exit 1
}
override=false
min_entries=2000
entries=$min_entries
dir=/var/adm
#
# the number of bytes per wtmp/wtmpx record depends on OS and release...
# check /usr/include/utmp*.h
#
case `uname`-`uname -r` in
OSF1-V5*)
record_wtmp=392
record_wtmpx=384
;;
OSF1-V4*)
record_wtmp=156
record_wtmpx=164
;;
Linux-*)
record_wtmp=384
record_wtmpx=384
dir=/var/log
;;
*)
#
# e.g. Solaris, IRIX
#
record_wtmp=36
record_wtmpx=372
esac
while test $# != 0
do
case $1 in
-f)
override=true
;;
-k)
shift
entries=$1
;;
*)
echo "$0: illegal argument: $1" >&2
usage
esac
test $# != 0 && shift
done
test "x$entries" = x && usage
expr "0$entries" : '.*[^0-9]' > /dev/null && usage
if test $entries -lt $min_entries && test $override = false
then
echo "$0: number of entries raised from $entries to $min_entries" >&2
entries=$min_entries
fi
cd $dir
umask 002
tmp=tmp_`date +%H%M%S`_$$
mkdir $tmp
for i in wtmp wtmpx
do
test -f $i || continue
eval record=\$record_$i
size=`expr $entries '*' $record`
set x `wc -c < $i`
shift
test "0$1" -gt $size || continue
#
# portable way to copy mode and ownership...
#
tar cf - $i | (cd $tmp && tar xfBp -)
skip=`expr '(' "$1" - $size ')' / $record`
dd ibs=$record skip=$skip if=$i of=$tmp/$i 2>&1 |
egrep -v '^[0-9]+\+[01] records (in|out)$' || mv $tmp/$i .
done
rmdir $tmp
Received on Fri Dec 21 2001 - 02:38:13 NZDT