Skip to content

Instantly share code, notes, and snippets.

@authsec
Last active June 16, 2016 19:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save authsec/42b3c5099e1cc45bc761c8bb6366ede8 to your computer and use it in GitHub Desktop.
Save authsec/42b3c5099e1cc45bc761c8bb6366ede8 to your computer and use it in GitHub Desktop.
Script to backup a remote directory to your local QNAP storage
#!/bin/sh
# Script to periodically synchronize a remote directory with your
# local QNAP storage.
# Source folders/user on remote machine
BACKUP_SOURCE_USER="backup-user"
BACKUP_SOURCE_HOST="backuphost.example.com"
BACKUP_SOURCE_FOLDER="/backup/subdir"
# Directory to save the remote backup locally
BACKUP_SINK_FOLDER="/share/MD0_DATA/Qmultimedia/backup-dir"
# For grepping the available space
BACKUP_SHARE_MOUNT_POINT="/share/MD0_DATA"
SUBJ_PREFIX="[RSYNC BACKUP]"
SUBJECT_FAIL="${SUBJ_PREFIX} Synchronization unsuccessful!"
SUBJECT_SUCCESS="${SUBJ_PREFIX} Synchronization successful!"
MAIL_TO="hansi@example.com"
MAIL_FROM="hansi-machine@example.com"
MSG_CONTENT_FILE="/tmp/email_body.txt"
RSYNC_CONTENT_FILE="/tmp/rsyncContent.txt"
# Sends a mail message
# $1 = subject
# $2 = to
# $3 = from
# $4 = msg
send_mail()
{
local tmpfile="/tmp/sendmail.tmp"
/bin/echo -e "Subject: $1\r" > "$tmpfile"
/bin/echo -e "To: $2\r" >> "$tmpfile"
/bin/echo -e "From: $3\r" >> "$tmpfile"
/bin/echo -e "\r" >> "$tmpfile"
if [ -f "$4" ]; then
cat "$4" >> "$tmpfile"
/bin/echo -e "\r\n" >> "$tmpfile"
else
/bin/echo -e "$4\r\n" >> "$tmpfile"
fi
/usr/sbin/sendmail -t < "$tmpfile"
rm $tmpfile
}
/bin/echo -e "Backup started at: $(date)\n" > ${MSG_CONTENT_FILE}
/bin/echo "Space available on backup disk (before backup)" >> ${MSG_CONTENT_FILE}
/bin/echo "$(df -h | head -n1)" >> ${MSG_CONTENT_FILE}
/bin/echo "$(df -h | grep ${BACKUP_SHARE_MOUNT_POINT})" >> ${MSG_CONTENT_FILE}
/bin/echo -e "\n" >> ${MSG_CONTENT_FILE}
/bin/echo -e "The following output was produced by the rsync command:\n" > ${RSYNC_CONTENT_FILE}
/usr/bin/rsync -azhv ${BACKUP_SOURCE_USER}@${BACKUP_SOURCE_HOST}:${BACKUP_SOURCE_FOLDER} ${BACKUP_SINK_FOLDER} >> ${RSYNC_CONTENT_FILE}
if [ $? -eq 0 ]
then
SUBJECT=${SUBJECT_SUCCESS}
else
SUBJECT=${SUBJECT_FAIL}
fi
/bin/echo -e "Backup ended at: $(date)\n" >> ${MSG_CONTENT_FILE}
/bin/echo "Space available on backup disk (after backup)" >> ${MSG_CONTENT_FILE}
/bin/echo "$(df -h | head -n1)" >> ${MSG_CONTENT_FILE}
/bin/echo "$(df -h | grep ${BACKUP_SHARE_MOUNT_POINT})" >> ${MSG_CONTENT_FILE}
/bin/echo -e "\n" >> ${MSG_CONTENT_FILE}
/bin/cat ${RSYNC_CONTENT_FILE} >> ${MSG_CONTENT_FILE}
send_mail "${SUBJECT}" "${MAIL_TO}" "${MAIL_FROM}" ${MSG_CONTENT_FILE}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment