A while back, I was asked to come up with a logrotation script.

This script would rotate all logs into a tarball and move it somewhere for archival purposes.

The problem was that I couldn’t just rotate today’s logs because it would be incomplete. I had to intelligently find a way to rotate the previous days logs (which would be complete) and then tar them up.

It turns out that you can do this with the “date” command in linux.


YESTERDAY=$(date -d "yesterday" '+%Y-%m-%d')
echo $YESTERDAY

This little snippet came in very handy and so I thought would share it.

The whole script is very small actually. Here it is. All you want to do is direct the output to a log file so you can review it later if need be. It’s chatty but you want chatty when you’re backing up and deleting log files.


#!/bin/bash
if [ $# -lt 3 ]; then
echo "USAGE: backup_logs.sh ORIGINAL FILE-PREFIX- DESTINATION"
exit
fi
# get command line variables
FILE=$2
ORIG=$1
DEST=$3
# get current time for log files.
NOW=$(date)
# get yesterdays date
YESTERDAY=$(date -d "yesterday" '+%Y-%m-%d')
# beginning entry in the log file
echo "$NOW Backing up $FILE from $ORIG for $YESTERDAY to $DEST/$FILE-$YESTERDAY.tgz"
echo "$NOW Command is /bin/tar -zcvf $DEST/$FILE$YESTERDAY.tgz $ORIG/$FILE$YESTERDAY*"
/bin/tar -zcvf $DEST/$FILE$YESTERDAY.tgz $ORIG/$FILE$YESTERDAY*
echo $NOW Done backing up logfiles to $DEST/$FILE-$YESTERDAY.tgz
echo "$NOW removing files that were backed up."
/bin/rm -vf $ORIG/$FILE$YESTERDAY*
echo "$NOW done removing backuped up files."