#!/bin/bash #Backupskript - Backup with rsync and ssh #Version: 0.1. (2019-12-17) # ### Konfigurationen ## Ordner müssen mit / enden. #Verzeichnis des Skriptes finden PFAD=$(dirname "$(readlink -e "$0")"); HOST=`hostname`; #SSH (key file based login required) SSH_TARGET="domain.local"; SSH_USER="sshuser"; SSH_DIR="/directory/"; #Ursprungsverzeichnis des Backup SOURCE=(` cat "${PFAD}/backup_dirs.conf" `); #Pfad zu Datei mit auszuschließenden Dateien/Ordnern EXCLUDE=${PFAD}"/backup_excl.conf"; #Pfad zu Logdatei LOG_FILE=${PFAD}"/backup_ext_"${HOST}".log"; #Pfad zu Lock-Datei LOCK_FILE=${PFAD}"/backup_ext_"${HOST}".lock"; ###Skript beginnt, unterhalb dieser Zeile nichts ändern NOW_START=$(/bin/date +%Y%m%d-%H%M%S); ##Test Log/Lock-Datei if [ -e ${LOCK_FILE} ]; then NOW_MSG=$(/bin/date +%Y%m%d-%H%M%S); `echo ${NOW_MSG}": Backup läuft bereits. Breche ab." >> ${LOG_FILE}`; unset NOW_MSG; exit; else touch ${LOCK_FILE}; fi if [ ! -f ${LOG_FILE} ];then touch ${LOG_FILE}; fi ##Funktionen #Log und Notify-Nachricht notify_log() { NOW_MSG=$(/bin/date +%Y%m%d-%H%M%S); if [ "${LOG_FINISH}" ]; then `echo ${NOW_MSG}": "${NOTIFY_LOG_MSG} | mail -s "[VOLMAR]: Backup nach nc.hw12.org erfolgreich" tba@timaba.de`; unset LOG_FINISH; fi `echo ${NOW_MSG}": "${NOTIFY_LOG_MSG} >> ${LOG_FILE}`; unset NOTIFY_LOG_MESSAGE; unset NOW_MSG; } #Lock-Datei löschen und Skript beenden lock_delete_end() { rm ${LOCK_FILE}; exit; } #Prüfen ob bereits Backups existieren SSH_LOGIN="${SSH_USER}@${SSH_TARGET}"; if [ "${SSH_DIR}" ]; then LASTBACKUP=`ssh ${SSH_LOGIN} ls -d ${SSH_DIR}[[:digit:]]* | /usr/bin/sort -r | /usr/bin/head -1 `; NOTIFY_LOG_MSG="Letztes Backup [${SSH_TARGET}]: "${LASTBACKUP}; notify_log; fi # Hardlinks definieren, wenn vorheriges Backup gefunden. if [ "${LASTBACKUP}" ]; then INC="--link-dest="${LASTBACKUP}; fi #Neuen Ordner anlegen `ssh ${SSH_LOGIN} mkdir -p ${SSH_DIR}${NOW_START}`; ##rsync EXCLUDIRS="--exclude-from="${EXCLUDE}; for SOURCE in "${SOURCE[@]}" do START_BACKUP="rsync ${EXCLUDIRS} ${INC} -avze ssh ${SOURCE[@]} ${SSH_LOGIN}:${SSH_DIR}${NOW_START} "; `echo ${START_BACKUP}`; done NOTIFY_LOG_MSG="Backup beendet."; LOG_FINISH="1"; notify_log; lock_delete_end;