#! /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