logdir="/var/log"
config="/var/log/rotatelogs.conf"
mv="/bin/mv"
default_duration=7
duration=$default_duration
if [ ! -f $config ]; then
echo "$0: no config file found. Can't proceed." >&2
exit 1
fi
if [ ! -w $logdir -o ! -x $logdir ]; then
echo "$0: you don't have the appropriate permissions in $logdir" >&2
exit 1
fi
cd $logdir
for name in $(find . -type -size +Oc ! -name '*[0-9]*' \
! -name '\.*' ! -name '*conf' -maxdepth 1 -print | \
sed 's/^\.\///'); do
count=$(( $count + 1 ))
duration="$(grep "^${name}=" $config | cut -d= -f2)"
if [ -z $duration ]; then
duration=$default_duration
elif [ "$duration" = "0" ]; then
echo "Duration set to zero: skipping $name"
continue
fi
back1="${name}.1"
back2="${name}.2"
back3="${name}.3"
back4="${name}.4"
if [ -f "$back1" ]; then
if [ -z $(find $back1 -mtime +$duration -print 2>/dev/null) ]; then
echo -n "$name's most recent backup is more recent then $duration "
echo "days: skipping"
continue
fi
fi
echo "Rotating log $name (using a $duration day schedule)"
if [ -f "$back3" ]; then
echo "... $back3 -> $back4"
$mv -f "$back3" "$back4"
fi
if [ -f "$back2" ]; then
echo "... $back2 -> $back3"
$mv -f "$back2" "$back3"
fi
if [ -f "$back1" ]; then
echo "... $back1 -> $back2"
$mv -f "$back1" "$back2"
fi
if [ -f "$name" ]; then
echo "... $name -> $back1"
$mv -f "$name" "$back1"
fi
touch "$name"
chmod 0600 "$name"
done
if [ $count -eq 0 ]; then
echo "Nothing to do: no log files big enough or old enough to rotate"
fi
exit 0
#lotatelogsの設定ファイル
#書式: name=duration
#nameには /var/log ディレクトリ内のログファイルの名前を指定する
#duration の単位は日数
ftp.log=30
last.log=14
lookupd.log=7
lpr.log=30
mail.log=7
netinfo.log=7
secure.log=7
statistics=7
system.log=14
#duration が0の場合はローテーションしない
wtmp=0