Backup FileMaker-Datenbanken in die ownCloud
#!/bin/bash
#####################################################
## (c) 2014-2017 Stefan Husch, qutic development ##
## ##
## Backup FileMaker-Datenbanken in die ownCloud ##
## ##
## !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ##
## !!!!! Verwendung des Skipts ohne Gewähr !!!!! ##
## !!!!! und auf eigenes Risiko !!!!! ##
## !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ##
## ##
## Die Parameter SOURCE, DEST und HOST müssen ##
## vor der Verwendung angepasst werden! ##
#####################################################
## In welchem Ordner liegen die Backup-Dateien des
## FileMaker Servers? Das Skript geht davon aus, dass
## im Ordner Backups ein Ordner Databases liegt. Dieser
## wird dann komprimiert.
SOURCE="/Library/FileMaker Server/Data/Backups"
## Wo liegt der ownCloud-Ordner?
## Der USER-Parameter liegt als Umgebungsvariable vor!
OWNCLOUD="/Users/${USER}/Documents/ownCloud"
## URI der ownCloud-Instanz
HOST="https://owncloud.example.com"
## Soll der Medien-Ordner nur einmal wöchentlich gesichert
## werden? 1= Ja, 0= Nein
## Das Skript geht davon aus, dass im Ordner Backups ein
## Ordner Media liegt. Dieser wird dann komprimiert.
BACKUP_MEDIA=0
#####################################################
## Ende der Skript-Konfiguration ##
#####################################################
## Umgebungsvariable setzen
LANG=en_US.UTF-8
## ownCloud-Backup-Ordner erstellen
BACKUP_FOLDER="FMP-Backup"
DEST="${OWNCLOUD}/${BACKUP_FOLDER}"
mkdir -p "${DEST}"
## Datum des Tages
TODAY=`/bin/date "+%Y-%m-%d"`
## Prüfung: Ist der SOURCE-Ordner vorhanden?
if [ ! -d "SOURCE" ]; then
printf "`/bin/date \"+%d.%m.%Y, %H:%M:%S\"`: FEHLER! Der SOURCE-Ordner ist nicht vorhanden: ${SOURCE} \n"
exit 1
fi
## Prüfung: Ist der DEST-Ordner vorhanden?
if [ ! -d "$DEST" ]; then
printf "`/bin/date \"+%d.%m.%Y, %H:%M:%S\"`: FEHLER! Der DEST-Ordner ist nicht vorhanden: ${DEST} \n"
exit 1
fi
## Start-Zeit in das Log schreiben
printf "`/bin/date \"+%d.%m.%Y, %H:%M:%S\"`: Start des FileMaker Server Datenbank-Backups...\n"
## Erstellung des tar.bz2-Archivs
cd "$SOURCE/daily_all_${TODAY}_2300/"
printf "`/bin/date \"+%d.%m.%Y, %H:%M:%S\"`: Komprimieren der FileMaker-Datenbanken "
/usr/bin/tar -cjf "$DEST/${TODAY}_Backup_FileMaker_Datenbanken.tar.bz2" ./Databases
printf "\n"
## Erstellen des sha1 Hash-Wertes für die Integritätsprüfung
/usr/bin/openssl sha1 "$DEST/${TODAY}_Backup_FileMaker_Datenbanken.tar.bz2" >> "$DEST/../fmp-backup-sha1.txt"
## Wenn nur wenig Speicherplatz in der ownCloud vorhanden ist
## und Dokumente auf dem FileMaker-Server gespeichert werden,
## dann ist es möglich diese Dateien nur einmal pro Woche zu
## sichern. In diesem Fall an einem Samstag.
if [ $BACKUP_MEDIA -eq 1 ]; then
if [ `/bin/date "+%A"` = 'Saturday' ]; then
printf "`/bin/date \"+%d.%m.%Y, %H:%M:%S\"`: Wöchentliches komprimieren der FileMaker-Dokumente "
/usr/bin/tar -cjf "$DEST/${TODAY}_Backup_FileMaker_Dokumente.tar.bz2" ./Media
printf "\n"
# Erstellen des sha1 Hash-Wertes für die Integritätsprüfung
/usr/bin/openssl sha1 "$DEST/${TODAY}_Backup_FileMaker_Dokumente.tar.bz2" >> "$DEST/../fmp-backup-sha1.txt"
fi
fi
## Alte Datenbank-Backups entfernen
## Es werden acht Versionen vorgehalten
printf "`/bin/date \"+%d.%m.%Y, %H:%M:%S\"`: Alte Datenbank-Backups entfernen "
/bin/ls -1dt "${DEST}"/* | /usr/bin/tail -n +9 | /usr/bin/xargs /bin/rm -f
printf "\n"
## Sollte der ownCloud-Client nicht laufen, beispielsweise
## weil kein Benutzer angemeldet ist, dann kann auch alter-
## nativ das Programm owncloudcmd verwendet werden, um das
## Backup in die ownCloud zu synchronisieren.
if [ -z `/bin/ps auxwww | /usr/bin/grep 'MacOS/owncloud' | /usr/bin/grep -v 'grep'` ]; then
if [ -f "${HOME}/.netrc" ]; then
printf "`/bin/date \"+%d.%m.%Y, %H:%M:%S\"`: Synchronisation des FMP-Backup Ordners in die ownCloud"
cd "$DEST/../"
/Applications/owncloud.app/Contents/MacOS/owncloudcmd -n --non-interactive -s "${DEST}" "${HOST}/remote.php/webdav/${BACKUP_FOLDER}" 2>/dev/null
printf "\n"
else
printf "`/bin/date \"+%d.%m.%Y, %H:%M:%S\"`: FEHLER! Konfigurationsdatei ${HOME}/.netrc fehlt!"
printf "`/bin/date \"+%d.%m.%Y, %H:%M:%S\"`: Inhalt der Datei solle wie folgt sein:"
printf "`/bin/date \"+%d.%m.%Y, %H:%M:%S\"`: machine owncloud-domain"
printf "`/bin/date \"+%d.%m.%Y, %H:%M:%S\"`: login owncloud-benutzername"
printf "`/bin/date \"+%d.%m.%Y, %H:%M:%S\"`: password owncloud-passwort"
fi
fi
## Ende des Backups
printf "`/bin/date \"+%d.%m.%Y, %H:%M:%S\"`: Ende des Backups\n--------------------------------\n"
exit 0