Simple rsync based backup script
This simple bash script is able to backup all given files and folders to a backup destination. I use it to backup all my Raspberry Pis, Banana Pis and also my notebook to my Synology NAS.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
#!/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; |
Example call:
1 |
$> bash backup_to_synology.sh "/data/snots/*" exclude.txt backup@ds.intern.ask-sheldon.com:/volume1/NetBackup/thinkpad disable-dry-run logfile.log |
If you want to run it as a crontab, you can use key based authentication (see […]