backup/backup.sh

90 lines
2.0 KiB
Bash
Raw Normal View History

2019-02-08 21:29:10 +00:00
#!/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;