Willkommen bei Profoxi

Hier erfahrt ihr alle neuesten Neuigkeiten, Tipps und Tricks rund um das Thema IT. Auf verständliche Art werden hier in regelmäßigen Abständen berichtet.

Nextcloud Backup Script

Nextcloud Backup Script

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

#!/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

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ß

Triopsi
Triopsi

Hi, mein Name ist Daniel R. Baumann. Ich bin seit 2007 Webseitenentwickler und entwickle bzw. administriere verschiedene Webprojekte. Ich berichte hier alle wichtigen News, Tipps und Tricks rund um das Thema IT.