FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Knallfrosch am 03 August 2023, 10:20:52

Titel: [Gelöst]Backup-Skript um einen Zeitstempel erweitern
Beitrag von: Knallfrosch am 03 August 2023, 10:20:52
Hallo,

ich nutze das folgende Skript:

#!/bin/bash

mountIp="Meine-IP"
mountDir="FHEM_Backup"
mountUser=""
mountPass=""
mountSubDir="Backup"
localMountPoint="/mnt/fhembackup"

#optional
backupsMax="20"
localBackupDir="/backup"
pushoverUser="XXXXX"
pushoverToken="XXXXXXX"
###################################

perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup info Backup gestartet"

if [ ! -e "$localBackupDir" ]
then
echo "$localBackupDir wird erstellt"
mkdir -p "$localBackupDir"
else
echo "$localBackupDir bereits vorhanden"
fi

tar --exclude=backup -cvzf "/$localBackupDir/$(date +%y%m%d_%H%M%S)_fhem_backup.tar.gz" "/opt/fhem" &>/dev/null

if ! ping -c 1 $mountIp
then
echo "$mountIp nicht erreichbar, stop"
perl /opt/fhem/fhem.pl 7072 "set FHEM.Backup error"
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup info $mountIp not found"
exit
else
echo "$mountIp erreichbar"
fi

localIp=$(hostname -I|sed 's/\([0-9.]*\).*/\1/')

if [ ! -e "$localMountPoint" ]
then
echo "$localMountPoint wird erstellt"
mkdir -p "$localMountPoint"
else
echo "$localMountPoint bereits vorhanden"
fi

if [ "$(ls -A $localMountPoint)" ]
then
echo "$localMountPoint nicht leer, kein Mounten notwendig"
else
echo "$localMountPoint leer, Mounten starten"
vorhanden="0"
while read line
do
mountComplete="Meine-IP:/volume1/FHEM_Backup /mnt/fhembackup nfs defaults 0 0"
echo "mountComplete: $mountComplete"
if [ `echo "$line" | grep -c "$mountComplete"` != 0 ]
then
echo "/etc/fstab: Eintrag bereits vorhanden: $mountComplete"
vorhanden="1"
break
fi
done < "/etc/fstab"
if [ "$vorhanden" != "1" ]
then
echo "/etc/fstab: Eintrag wird ergänzt: $mountComplete"
echo "$mountComplete" >> "/etc/fstab"
fi
echo "Mounts werden aktualisiert"
mount -a
sleep 3
fi

if [ "$(ls -A $localMountPoint)" ]
then
if [ ! -e "$localMountPoint/$mountSubDir/$localIp" ]
then
mkdir -p "$localMountPoint/$mountSubDir/$localIp"
else
echo "$localMountPoint/$mountSubDir/$localIp existiert bereits"
fi
find "$localBackupDir" -name '*fhem_backup.tar.gz' | while read file
do
fileSize="0"
fileSizeMB=$(du -h $file)
fileSizeMB=${fileSizeMB%%M*}
filename=${file##*/}
echo "$filename ($fileSizeMB MB) wird in den Backupordner verschoben"
if [[ "$pushoverToken" != "" && "pushoverUser" != "" ]]
then
curl -s -F "token=$pushoverToken" -F "user=$pushoverUser" -F "title=FHEM $localIp" -F "message=FHEM Backup mit $fileSizeMB MB wurde erstellt" https://api.pushover.net/1/messages.json
fi
#mv "$file" "$localMountPoint/$mountSubDir/$localIp/$filename"
cp "$file" "$localMountPoint/$mountSubDir/$localIp/$filename"
rm "$file"
perl /opt/fhem/fhem.pl 7072 "set FHEM.Backup off"
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup last_backup $filename"
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backupMB $fileSizeMB"
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup info Backup erfolgreich"
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup date ZEITSTEMPEL"
done
else
echo "Mounten hat anscheinend nicht geklappt, skip."
exit
fi

#Löschen alter Backups
if [[ "$backupsMax" != "" && "$backupsMax" != "0" ]]
then
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backupFilesMax $backupsMax"
backupsCurrent=`ls -A "$localMountPoint/$mountSubDir/$localIp" | grep -c "_fhem_backup.tar.gz"`
backupsDelete=$(($backupsCurrent-$backupsMax))
if [ "$backupsDelete" -gt "0" ]
then
echo "$backupsCurrent Backups vorhanden - nur $backupsMax aktuelle Backups werden vorgehalten - $backupsDelete Backups werden gelöscht"
ls -d "/$localMountPoint/$mountSubDir/$localIp/"* | grep "_fhem_backup.tar.gz" | head -$backupsDelete | xargs rm
else
echo "$backupsCurrent Backups vorhanden - bis $backupsMax aktuelle Backups werden vorgehalten"
fi
else
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backupFilesMax no limit"
fi

backupsCurrent=`ls -A "$localMountPoint/$mountSubDir/$localIp" | grep -c "_fhem_backup.tar.gz"`
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backupFiles $backupsCurrent"


echo "Mount wieder unmounten"
umount "$localMountPoint"

um Backups von FHEM zu erstellen.
Soweit so gut, das funktioniert.

Ich würde gerne mit der Zeile:

perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup date ZEITSTEMPEL"Den Zeitstempel (Datum und Uhrzeit) des Backups in das Reading übertragen, aber ich weiß nicht wie ich diesen Zeitstempel definieren kann um ihn dann entsprechend schreiben zu lassen.

Kann mir bitte jemand helfen um diese Zeile mit Leben zu füllen.

Vielen Dank.

Grüße

Titel: Aw: Backup-Skript um einen Zeitstempel erweitern
Beitrag von: Wernieman am 03 August 2023, 10:52:03
Wie soll denn der "Zeitstempel" aussehen?
Titel: Aw: Backup-Skript um einen Zeitstempel erweitern
Beitrag von: Knallfrosch am 03 August 2023, 10:54:49
Zitat von: Wernieman am 03 August 2023, 10:52:03Wie soll denn der "Zeitstempel" aussehen?

Zeitstempel= Tag.Monat.Jahr Stunden:Minuten

03.08.2023 10:54



Titel: Aw: Backup-Skript um einen Zeitstempel erweitern
Beitrag von: Wernieman am 03 August 2023, 12:01:27
DATUM=$(date "+%d.%m.%y %H:%S")

perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup date $DATUM"

Mach beim Jahr dieses 2 Stellig. Wenn Du es 4 Stellig haben willst, bitte das Große Y.

Ansonsten siehe (auf der Linux-Shell) ein "man date"

Hinweis:
Ungetestet aus dem Kopf geschrieben
Titel: Aw: Backup-Skript um einen Zeitstempel erweitern
Beitrag von: Knallfrosch am 03 August 2023, 13:11:01
Zitat von: Wernieman am 03 August 2023, 12:01:27DATUM=$(date "+%d.%m.%y %H:%S")

perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup date $DATUM"

Mach beim Jahr dieses 2 Stellig. Wenn Du es 4 Stellig haben willst, bitte das Große Y.

Ansonsten siehe (auf der Linux-Shell) ein "man date"

Hinweis:
Ungetestet aus dem Kopf geschrieben

Hallo,

vielen Dank für die schnelle Hilfe.
Das funktioniert nun, wie ich es mir gewünscht habe.


Grüße
Titel: Aw: [Gelöst]Backup-Skript um einen Zeitstempel erweitern
Beitrag von: Wernieman am 03 August 2023, 17:45:58
Ist Dir auch klar warum?
Titel: Aw: [Gelöst]Backup-Skript um einen Zeitstempel erweitern
Beitrag von: betateilchen am 03 August 2023, 18:15:10
Zitat von: Wernieman am 03 August 2023, 17:45:58Ist Dir auch klar warum?

Weil er/sie/es wusste, wie man mit STRG-C und STRG-V arbeitet.
Titel: Aw: [Gelöst]Backup-Skript um einen Zeitstempel erweitern
Beitrag von: Knallfrosch am 03 August 2023, 19:23:46
Zitat von: Wernieman am 03 August 2023, 17:45:58Ist Dir auch klar warum?

Naja, halbwegs.

Die Zeile set reading war mir klar. Zumindest konnte ich mir den Befehl schon aus dem Skript herleiten.

Wie eine Variable anzulegen ist in dem Skript ebenso. Nur war mir nicht klar wie eben die Formatierung von date aussehen muss.
Das man date habe ich mir auch abgeschaut, aber damit komme ich nicht klar und muss absolut passen. Anhand dessen, hätte ich es nicht geschafft.

Daher nochmal Danke für die Hilfe.

Grüße