Nextcloud Backup Script

Inhalte

Wer eine Cloud(Nextcloud) besitzt, der muss sich auch um die Backups kĂŒmmern. Ich habe hier ein sehr verstĂ€ndliches Script, dass dir erlaub mithilfe eines Cronjobs regelmĂ€ĂŸige Backups automatisiert zu machen. Das Script erkennt selbstĂ€ndig wie viele Backups gemacht worden sind und löscht Ă€ltere Backups.

Vorraussetzungen

  • Benutzer mit Root Rechten

Script/Code

#!/bin/bash

#Backupverzeichnisse
nowDate=$(date +"%Y%m%d_%H%M%S")
backuppfd="/tmp/backup"
backupverz="${backuppfd}/${nowDate}/"
nextcloudfilesdir="/var/www/nextcloud"
maxBackups=3 # Anzahl an Backups

#Datenbank Benutzer und Passwort
nxtDatenbankname=""
nxtdbUser=""
nxtdbPassword=""

#Webserver
webservername="apache2" # Entweder per Apache2 oder Nginx 
webserveruser="www-data" # Webserverusername; Default: www-data
filenamebkfile="backup-nextcloud-filedir.tar.gz" # Name des Backups der Dateien
filenamebkDb="nextcloud-db-backup.sql" # Name des Backups fuer die Datenbank

echoerror() { 
	cat <<< "$@" 1>&2;
	exit 99; 
}
ausgabe(){
	echo $1
	echo
}

if [ "$(id -u)" != "0" ]
then
	echoerror "[E]: Das Script muss mit Root ausgefuehrt werden!"
fi

#Backupsverzeichnis vorhanden? Wenn nicht, erstellen
if [ ! -d "${backupverz}" ]
then
	mkdir -p "${backupverz}"
fi

# Wartung in Nextcloud aktivieren
ausgabe "Wartung bei Nextcloud aktivieren..."
cd "${nextcloudfilesdir}"
sudo -u "${webserveruser}" php occ maintenance:mode --on
cd ~
ausgabe "Fertig"

# Webserver stoppen per Service
echo "Webserver stoppen..."
service "${webservername}" stop
ausgabe "Fertig"

# Backup der Dateien erstellen
ausgabe "Backup der NextCloud Dateien erstellen..."
tar -cpzf "${backupverz}/${filenamebkfile}" -C "${nextcloudfilesdir}" .
ausgabe "Fertig"

# Backup der Datenbank erstellen
ausgabe "Backup der Nextcloud Datenbank erstellen..."
mysqldump --single-transaction -h localhost -u "${nxtdbUser}" -p"${nxtdbPassword}" "${nxtDatenbankname}" > "${backupverz}/${filenamebkDb}"
ausgabe "Fertig"

# Webserver wieder per Service starten
ausgabe "Webserver starten..."
service "${webservername}" start
ausgabe "Fertig"

# Wartung in Nextcloud wieder deaktivieren
ausgabe "Wartung wieder deaktivieren..."
cd "${nextcloudfilesdir}"
sudo -u "${webserveruser}" php occ maintenance:mode --off
cd ~
ausgabe "Fertig"

# Loeschen von alten Backups. Je nach Einstellung in maxBackups
if (( ${maxBackups} != 0 ))
then	
	nrOfBackups=$(ls -l ${backuppfd} | grep -c ^d)
	if (( ${nrOfBackups} > ${maxBackups} ))
	then
		ausgabe "Alte Backups entfernen"
		ls -t ${backuppfd} | tail -$(( nrOfBackups - maxBackups )) | while read dirToRemove; do
		ausgabe "${dirToRemove}"
		rm -r ${backuppfd}/${dirToRemove}
		ausgabe "Fertig"
    done
	fi
fi
ausgabe "Backup wurde erfolgreich erstellt! ->(${backupverz})"
exit 0;

Benutzung

Will man manuell ein Backup erstellen genĂŒgt es, das Script per Bash aufzurufen.

./NextCloudBackup.sh

Per Cron steuern

wir öffnen unter root die Cronshell auf:

crontab -e

und fĂŒgen eine Zeile hinzu:

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

0 1 * * * /home/<pfadZumScript>/NextcloudBackup.sh >> /tmp/back_log.log 2>&1

Übersetzung: Jeder Nacht um 1Uhr wird das Script NextcloudBackup.sh aufgerufen. Erstelle eine Log Datei unter /tmp/.

NatĂŒrlich kann man das Script nach seinen eigenen WĂŒnschen verĂ€ndern. So kann man ein Upload zum Backup Servers implementieren oder eine E-mail Benachrichtigung erstellen.

Viel Spaß 🙂

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 4.9 / 5. Anzahl Bewertungen: 9

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

4 Kommentare

  1. Hey Daniel, vielen Dank fĂŒr die Vorlage.
    Im Script hat sich aber ein kleiner Tippfehler eingeschlichen. Schau mal bei dem Block „# Wartung in Nextcloud wieder deaktivieren“. Es wird so nicht funktionieren den Maintenance Mode wieder zu aktivieren da du mit „${webserverUser}“ arbeitest. Das klappt nicht, da die Variable „webserveruser“ keine Großbuchstaben enthĂ€lt.

    Greets
    Julian

  2. Hallöchen, super praktisches Script, danke dafĂŒr.

    Bei mir wurde allerdings ein Fehler geworfen in Zeile 21 bei ausgabe(), hier ist ein leerer „echo“ Befehl, der einen Fehler verursacht. Ich habe einfach ein echo „—“ draus gemacht, dann hat man auch ein Trennzeichen bei der AusfĂŒhrung.

    Ach und, falls jemand nach dem Datenbanknamen sucht: der ist bei MySQL-Nextclouds standardmĂ€ĂŸig „nextcloud“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert