osmo-pcap/contrib/osmo_pcap_clean_old

81 lines
1.7 KiB
Bash
Executable File

#! /bin/sh
# Script designed to clean up (zip/delete) old files
# Adjust the variables below and then copy/symlink this script
# to /etc/cron/cron.{hourly,daily}
# We want to keep the filenames dated and that confuses logrotate,
# hence this script.
# Method used either AGE or FILES
METHOD="AGE"
# Maximum age of the logs
MAXAGE=120
# Maximum number of logs to keep
MAXFILES=30
# Zip all files after the first n files
ZIPAFTER=3
# Set to 1 for debug output
VERBOSE=0
# Path where the logfiles reside in
BASEPATH="/var/lib/osmo-pcap/"
# Find the client names present in basepath
# Delete files older than MAXAGE days
# Zip all but the first ZIPAFTER files
cd "$BASEPATH"
do_cleanup_age()
{
find . -ctime +$MAXAGE -name "trace-$1-*.pcap*" |sort -r | while read LOG; do
[ $VERBOSE -eq 1 ] && echo "Deleting file \"$LOG\""
rm -f "$LOG"
done
}
do_cleanup_files()
{
i=1
find . -name "trace-$1-*.pcap*" |sort -r | while read LOG; do
if [ $i -gt $MAXFILES ]; then
[ $VERBOSE -eq 1 ] && echo "Deleting file \"$LOG\""
rm -f "$LOG"
fi
i=$(($i+1))
done
}
do_zip()
{
i=1
find . -name "trace-$1-*.pcap*" |sort -r | while read LOG; do
if [ $i -gt $ZIPAFTER ]; then
if [ "${LOG##*.}" != "gz" ]; then
[ $VERBOSE -eq 1 ] && echo "Compressing file \"$LOG\""
gzip "$LOG"
fi
fi
i=$(($i+1))
done
}
# Use an explicit pattern here
find . -name "trace-*.pcap*" |sed -n -e "s/.*trace-\(.\+\)-[0-9]\{8\}_[0-9]\{6\}\.pcap\(\..\+\)\?/\1/p" |sort |uniq | while read CLIENT; do
[ $VERBOSE -eq 1 ] && echo "Cleaning logs for $CLIENT"
if [ "x$METHOD" == "xAGE" ]; then
do_cleanup_age "$CLIENT"
elif [ "x$METHOD" == "xFILES" ]; then
do_cleanup_files "$CLIENT"
else
echo "Error, set METHOD to AGE or FILES"
exit 1
fi
do_zip "$CLIENT"
done