Stefan's Weblog

14Jan/190

Nextcloud – Kalender und Adressbücher sichern mit calcardbackup

Vor kurzem habe ich nach einer Lösung gesucht, wie ich die Kalender und Adressbücher meiner Nextcloud einfach und schnell sichern kann. Ein ganz wichtiger Punkt für mich war, beides muss auch ohne eine Nextcloud wieder hergestellt werden können, z.B. bei meinem E-Mail-Provider.

Bei einer privat gehosteten Nextcloud-Instanz, die auf einem Raspberry Pi läuft finde ich das sehr wichtig. Schließlich gibt es einige Faktoren bei denen der kleine Pi von heut auf morgen den Geist aufgeben kann, z.B. Hardware kaputt, SD-Karte defekt, Überspannung, Blitzschlag, etc.

Ich bin bei meiner Suche auf das Projekt "calcardbackup" gestoßen, dass genau das macht was ich brauche. Es speichert die Adressbücher im vcf-Format und die Kalender im ics-Format auf einen definierten Pfad.
Das Skript kann von github heruntergeladen werden ➡ https://github.com/BernieO/calcardbackup
Die Installation ist wie in der Dokumentation beschrieben vorzunehmen.

Ich habe mich das Ganze noch ein wenig angepasst, da ich eine Speicherung der Adressbücher- und der Kalenderdateien auf meiner AVM haben wollte und nicht irgendwo auf der SD-Karte des Pis oder der angeschlossenen Festplatte. Zusätzlich sollte die Datei auch nochmal per E-Mail an meine E-Mail gesendet werden, just in case.

Ich verwende dabei ein paar Code-Schnopsel aus meinem Artikel ➡ Raspberry Pi SD-Karte im Livebetrieb sichern, um das Share auf meiner Fritzbox zu mounten.

Hier nun mein Skript

#!/bin/bash

# by strobelstefan.de
# 2019-01-13
# Version: 1.0
# https://strobelstefan.org/?p=6094

#
# This script uses the project calcardbackup (https://github.com/BernieO/calcardbackup) to export calendar and address books 
# from Nextcloud and sends is via e-mail to a defined address 

###################################
# Define Variables
###################################

# Storage device as defined in you /etc/fstab.
mountpoint='/mnt/fritzbox'

# Location of your Nextcloud
NEXTCLOUD='/var/www/html/nextcloud'

# Location of your log file
LOGFILE="/var/log/kalenderbackup.log"

# Location Backup Path
IMAGE='/mnt/fritzbox/Nextcloud/calcardbackup'

# Location of the calcardbackup script
CALCARDBACKUP='/etc/scripts/calcardbackup/calcardbackup'

# E-Mail Address where the export should be emailed to
EMAILBACKUP="backup@email.de"

# E-Mail where the log file should be mailed to
EMAIL="logfile@email.de"



###################################
# This removes your old log file
###################################

rm ${LOGFILE}


###################################
# MOUNTPOINT Section - Check Mountpoint Availability
###################################
# It checks if your mountpoint is accessible by your RPi.
# This is a crucial step, if the sotrage is not available the clone process of the SD card cannot conducted.
# Process
# 1. Check if mountpoint is accessible
# 2. If YES go to DELETION Section
# 3.1 If NO, try to mount storage device as defined in /etc/fstab
# 3.2 If mount is again not sucessful exit script, no futher action will be conducted

if [ "$(findmnt ${mountpoint})" ] ;
        then
                echo $(date +%Y-%m-%d_%H-%M-%S) " - Mountpoint accessible by your Raspberry Pi" >> ${LOGFILE}
        else
                echo $(date +%Y-%m-%d_%H-%M-%S) " - Mountpoint was not mounted, try to mount it now as defined in your /etc/fstab" >> ${LOGFILE}

        #This command mounts all storages defined in /etc/fstab
        mount -a

        if [ $? != 0 ]
                then
                        echo $(date +%Y-%m-%d_%H-%M-%S) " - Mount of storage in first try sucessfully completed" >> ${LOGFILE}
                sleep 5
                        mount -a
                if [ $? != 0 ]
                then
                        echo $(date +%Y-%m-%d_%H-%M-%S) " - Backup FAILED! Was not able to mount your storage device. Stop backup process. You have to check it manually." >> ${LOGFILE}
                        echo "Sent backup status via e-mail" | mail -a ${LOGFILE} -s "NEXTCLOUD Pi - Backup FAILED" ${EMAIL} < ${LOGFILE}
                exit
                fi
        fi

fi


###################################
# Calls the calcardbackup script
# For more information please refer to
# https://github.com/BernieO/calcardbackup
###################################

sudo -u www-data ${CALCARDBACKUP} "${NEXTCLOUD}" -o ${IMAGE} -i -r 90
echo $(date +%Y-%m-%d_%H-%M-%S) " - Successfully exported calendar and address books to AVM" >> ${LOGFILE}


###################################
# Send Export via E-Mail
###################################
# Will look for the newest file in the defined path ${IMAGE}
# and send the file as an attachement via e-mail to the defined address ${EMAILBACKUP}

newest=$(ls -rt ${IMAGE}*.tar.gz | tail -n1)
echo $(date +%Y-%m-%d_%H-%M-%S) " - Please find attached the actual export of calendars and address books of your Nextcloud instance." | mutt ${EMAILBACKUP} -a $newest -s "NEXTCLOUD Pi - Exported Calendar and Address Book"
echo $(date +%Y-%m-%d_%H-%M-%S) " - Successfully sent export via E-Mail to ${EMAILBACKUP}"  >> ${LOGFILE}


###################################
# UMOUNT Section - Unmount Storage Device
###################################
# This command unmounts the defined storage device
# In the first try it will gently try to unmount, if the device is busy the command will force the unmount.

echo $(date +%Y-%m-%d_%H-%M-%S) " - Started to unmount storage device">> ${LOGFILE}

umount ${mountpoint}

if [ $? != 0 ]
        then
                echo $(date +%Y-%m-%d_%H-%M-%S) " - Device busy, unmount forcefully" >> ${LOGFILE}
        sleep 5
                umount -l ${mountpoint}
        if [ $? != 0 ]
    then
        echo $(date +%Y-%m-%d_%H-%M-%S) " - Issue with umount you storage, check manually" >> ${LOGFILE}
    break
        fi
fi


###################################
# Send Log File
###################################
# This sends the log file to ${EMAIL}

echo $(date +%Y-%m-%d_%H-%M-%S) " - Calendar & Address Book exported and saved" | mail -a ${LOGFILE} -s "NEXTCLOUD Pi - Calendar & Address Book exported and saved" ${EMAIL} < ${LOGFILE}

Das Skript noch ausführbar machen

sudo chmod +x skript.sh

Und dann testen

sudo ./skript.sh

Automatisieren kann man den ganzen Prozess mit einen CRON Job:

sudo crontab -e

Dort die folgenden Zeilen eintragen, damit einmal am Tag um 0:00 Uhr der Export gestartet wird

#Calender & Addressbook Backup
@daily /bin/bash /etc/scripts/skript.sh

Und hier das Skript zu herunterladen
nextcloud_backup_Kalender_Adressbuch

hat dir dieser Artikel gefallen?

Dann abonniere doch diesen Blog per RSS Feed!

Kommentare (0) Trackbacks (0)

Zu diesem Artikel wurden noch keine Kommentare geschrieben.


Leave a comment

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Noch keine Trackbacks.

%d Bloggern gefällt das: