diff --git a/backup.sh b/backup.sh new file mode 100755 index 0000000..5c4e08a --- /dev/null +++ b/backup.sh @@ -0,0 +1,89 @@ +#!/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; diff --git a/dirlist.conf b/dirlist.conf new file mode 100755 index 0000000..d72f231 --- /dev/null +++ b/dirlist.conf @@ -0,0 +1,6 @@ +/etc +/var/www +/opt +/var/lib/mysql +/mnt/md0/nextcloud + diff --git a/excludes b/excludes new file mode 100644 index 0000000..e69de29