[Gelöst]Backup-Skript um einen Zeitstempel erweitern

Begonnen von Knallfrosch, 03 August 2023, 10:20:52

Vorheriges Thema - Nächstes Thema

Knallfrosch

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


Wernieman

Wie soll denn der "Zeitstempel" aussehen?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Knallfrosch

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




Wernieman

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
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Knallfrosch

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

Wernieman

- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Knallfrosch

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