#!/bin/bash #Backupskript - Local backup with rsync for small server #Version: 0.0.2 (2019-01-12) # ### Konfigurationen ## Ordner müssen mit / enden. #Verzeichnis des Skriptes finden PFAD=$(dirname "$(readlink -e "$0")"); HOST=`hostname`; #Ursprungsverzeichnis des Backup SOURCE=(` cat "${PFAD}/dirlist.conf" `); #Pfad zu Datei mit auszuschließenden Dateien/Ordnern EXCLUDE=${PFAD}"/excludes"; #Pfad zu Logdatei LOG_FILE="/var/log/backup/backup_"${HOST}".log"; #Pfad zu Lock-Datei LOCK_FILE=${PFAD}"/backup_"${HOST}".lock"; #Zielpfad des Backup DEST_PATH="/mnt/md0/backups/pax/"; ###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 "PAX: Backup erfolgreich" pax+root@hw12.org`; 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. if [ "${DEST_PATH}" ]; then LASTBACKUP=`ls -d ${DEST_PATH}[[:digit:]]* | /usr/bin/sort -r | /usr/bin/head -1 `; NOTIFY_LOG_MSG="Letztes Backup: "${LASTBACKUP}; notify_log; fi # Neuen Ordner anlegen. DESTINATION=${DEST_PATH}${NOW_START}; `mkdir -p ${DESTINATION}`; # Hardlinks definieren, wenn vorheriges Backup gefunden. if [ "${LASTBACKUP}" ]; then INC="--link-dest=${LASTBACKUP}" fi # Rsync aufrufen. EXCLUDIRS="--exclude-from="${EXCLUDE}; for SOURCE in "${SOURCE[@]}" do END="rsync -az ${EXLUDIRS} ${INC} ${SOURCE[@]} ${DESTINATION}"; ${END}; done NOTIFY_LOG_MSG="Backup beendet."; LOG_FINISH="1"; notify_log; lock_delete_end;