Defjam121
8/23/2017 - 6:10 PM

Backup FileMaker-Datenbanken in die ownCloud

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