#!/bin/bash
# Lockfilecheck for race condition protection
exec 9>.backupLockFile
if ! flock -n 9 ; then
echo "Another instance is already running dude!";
exit 1;
fi
#echo "1: $1";
#echo "2: $2";
#echo "3: $3";
#echo "4: $4";
DATE=`date +%y%m%d`;
SOURCES="/*";
if [ "$1" == "help" ]
then
echo "Help";
echo "- USAGE: bash backup_to_synology.sh [DIRTOBACKUP] [EXCLUDEFILEPATH] [BACKUPDESTINATION] [disable-dry-run]";
echo "- OR: bash backup_to_synology.sh null null [BACKUPDESTINATION] [disable-dry-run]";
echo "- OR: bash backup_to_synology.sh [DIRTOBACKUP] null [BACKUPDESTINATION] [disable-dry-run]";
echo "- OR: bash backup_to_synology.sh [DIRTOBACKUP] null [BACKUPDESTINATION] [disable-dry-run] [logfile]";
exit 0;
elif [ -n "$1" -a "$1" != "null" ]
then
SOURCES="$1";
fi
EXCLUDEFILE="";
if [ -n "$2" -a "$2" != "null" ]
then
EXCLUDEFILE="--exclude-from=$2";
fi
# Define remote target
TARGET="";
if [ -n "$3" -a "$3" != "null" ]
then
TARGET="$3";
else
echo "You have to give me a destination";
exit 1;
fi
DRYRUN="--dry-run";
if [ -n "$4" -a "$4" == "disable-dry-run" ]
then
DRYRUN="";
fi
# rsync base params
# --delete - delete destination files that dosn't exist on the source
# --exclude-from - file / folders to ignore can be
#
# use -–dry-run to simulate backup -> this is the default mode unless disable-dry-run is set
PARAMS="-azvrpuE --delete";
# Path to logfile
LOGFILE="rsync_log.$DATE.log";
if [ -n "$5" -a "$5" != "null" ]
then
LOGFILE="$5";
fi
# determine the path to "rsync"
RSYNC=`which rsync`;
# run backup command
$RSYNC $PARAMS $DRYRUN $EXCLUDEFILE $SOURCES $TARGET > $LOGFILE;
exit 0;