Rclone backup Skript
Hier ein kleines Skript, welches von mir verwendet wird um automatisch Backups von Dateien und Ordner mittels rsync auf einen Cloud Speicher zu sichern.
- Kopiere das Skript nach /usr/local/bin/rclone-backup
- Wieviel alte Backups möchtest du behalten? Konfiguriere die KEEP Variable im Skript.
- Den Remote Pfad der genutzt werden soll mit der Variable REMOTE einstellen.
- Erstelle einen Cronjob und entscheide wie oft ein backup erstellt werden soll.
Bedienung:
Aufruf mit ./rclone-backup „WIEVIELE BEHALTEN?“ „WAS SOLL GESICHERT WERDEN?“
rclone-backupe 6 /home/user1
- Es wird die Datei /tmp/241014-102736-user1.tar.gz erstellt.
- Danach wird wird nach user1 Dateien auf der Cloud gesucht und nur die 3 aktuellsten werden behalten.
- Jetzt wird die Datei /tmp/241014-102736-user1.tar.gz auf die Cloud kopiert.
Es sollte hierfür ein Cronjob erstellt werden.
Beispiel:
* * * */3 root /usr/local/rclone-backup /home/user1
Skript
#
# Benutzung mit ./rclone-backup "Was soll gesichert werden"
# Variablen
#Wieveiele Backups werden behalten
KEEP=$1
# Remote Pfad von Rclone
REMOTE=gdrive:/rclone/
# Wovon das Backup erstellen
BACKUPFROM=$2
# Wurde die KEEP Variable gesetzt? Wenn nicht setze den Default
if [ -z $KEEP ]; then KEEP=3; fi
# Wurde ein Backuppfad übergeben?
if [ -z $BACKUPFROM ]; then echo "Was soll gesichert werden? Aufruf mit ./rclone-backup 'Wieviel wird behalten?' 'Was wird gesichert?'" ; exit 1 ; fi
# Wichtige Variable erstéllen
DATE=$(date +%Y%m%d-%H%M%S)
NEWBACKUP=$(basename $BACKUPFROM)-$DATE.tar.gz
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# Lokale Sicherung erstellen
if [ -f /tmp/$NEWBACKUP ]; then rm /tmp/$NEWBACKUP; fi
tar cfz /tmp/$NEWBACKUP $BACKUPFROM 2> /dev/null
# Remote Backups auslesen
# Liste der Backups die bleiben
KEEPLIST=$(rclone ls $REMOTE | grep $(basename $BACKUPFROM) | awk '{print $2}' | sort | tail -n $KEEP)
# Liste aller Backups auf Remote
REMOTELIST=$(rclone ls $REMOTE | grep $(basename $BACKUPFROM) | awk '{print $2}' | sort )
# Prüfung ob backup gelöscht werden kann. Wenn das Backup nicht in der KEEPLIST steht, dann lösche dieses
for BACKUP in $REMOTELIST ; do
if echo "$KEEPLIST" | grep "$BACKUP" &> /dev/null ;
then continue
else
printf "${RED}" ; rclone deletefile $REMOTE$BACKUP -v ; printf "$NC"
fi
done
printf "${GREEN}"
# Neues Backup hochladen
if rclone copy /tmp/$NEWBACKUP $REMOTE -v ; then
logger "Rclone Backup $BACKUPFROM to $REMOTE successfull"
printf "${YELLOW}Rclone Backup $BACKUPFROM to $REMOTE successfull${NC}\n"
fi
printf "${NC}"
rm /tmp/$NEWBACKUP