#!/bin/bash ## simple redis rdb backup script ## usage ## rdb-backup.sh rdb.path backup.dir bgsave.wait.seconds SRCPATH=${1:-"/var/lib/redis/"} DESTPATH=${2:-"/opt/redisbackups"} DESTFILE=${3:-"`date '+%Y-%m-%d-%H%M%S'`-redis.rdb.tar.gz"} WAIT=${4:-10} ## default wait for 10 seconds DEST="${DESTPATH}/${DESTFILE}" BUCKETDEST="/mnt/disks/sf3-production-backup/redisbackups" test -f "$SRCPATH"/dump.rdb || { echo No rdb file found ; exit 1 } test -d "$DESTPATH" || { echo Creating backup directory $backup_to && mkdir -p "$DESTPATH" } ## launch bgsave echo bgsave | redis-cli -h 10.122.0.5 echo "waiting for $WAIT seconds..." sleep $WAIT try=5 while [ $try -gt 0 ] ; do saved=$(echo 'info Persistence' | redis-cli -h 10.122.0.5 | awk '/rdb_bgsave_in_progress:0/{print "saved"}') ok=$(echo 'info Persistence' | redis-cli -h 10.122.0.5 | awk '/rdb_last_bgsave_status:ok/{print "ok"}') if [[ "$saved" = "saved" ]] && [[ "$ok" = "ok" ]] ; then tar cf - -C "$SRCPATH" dump.rdb | pigz -9 > "$DEST" mv "$DEST" "$BUCKETDEST" if [ $? = 0 ] ; then echo "redis rdb backed up to $DEST and moved to $BUCKETDEST." exit 0 else echo ">> Failed to backup!" fi fi try=$((try - 1)) echo "redis maybe busy, waiting and retry in 5s..." sleep 5 done exit 1