backup.sh funktioniert aktuell nicht

Begonnen von hermanski.k, 12 August 2017, 12:28:39

Vorheriges Thema - Nächstes Thema

hermanski.k

Hallo,
aktuell verwende ich fhem auf einem rasp. pi 3.
Nun möchte ich ein automatiesiertes backup täglich erstellen welches ein backup im cloudspeicher bei box.com ablegt.

Hierfür habe ich das backup.sh script aus folgendem link verwendet:
http://www.meintechblog.de/2015/05/fhem-howto-automatisches-backup-auf-externem-nas/

Das script welches in ../../opt/fhem/FHEM/ agelegt ist sieht wie folgt aus:
#!/bin/bash
myTelnetPW="MEINPASS2"
mountIp="192.168.178.1"
mountDir="fritz.nas/Online-Speicher/FHEM_Backup"
mountUser="FHEMNAS"
mountPass="MEINPASS1"
mountSubDir="rpi/fhem"
localMountPoint="/Q/backup"

#optional
backupsMax="0"
localBackupDir="/backup"
pushoverUser=""
pushoverToken=""
###################################

perl /opt/fhem/fhem.pl 7072 $myTelnetPW "setreading FHEM.Backup info backup starting now"

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 $myTelnetPW "set FHEM.Backup error"
perl /opt/fhem/fhem.pl 7072 $myTelnetPW "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="//$mountIp/$mountDir $localMountPoint cifs username=$mountUser,password=$mountPass,iocharset=utf8,sec=ntlm 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=Backup mit $fileSizeMB MB wird 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 $myTelnetPW "set FHEM.Backup off"
perl /opt/fhem/fhem.pl 7072 $myTelnetPW "setreading FHEM.Backup backup $filename"
perl /opt/fhem/fhem.pl 7072 $myTelnetPW "setreading FHEM.Backup backupMB $fileSizeMB"
perl /opt/fhem/fhem.pl 7072 $myTelnetPW "setreading FHEM.Backup info backup done"
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 $myTelnetPW "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 $myTelnetPW "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 $myTelnetPW "setreading FHEM.Backup backupFiles $backupsCurrent"


echo "Mount wieder unmounten"
umount "$localMountPoint"


Online box.com Speicher ist per Fritzbox eingebunden.

Wenn ich jetzt per ssh per sudo bash backup.sh ausführe erhalte ich folgende Meldung:

/backup bereits vorhanden
PING 192.168.178.1 (192.168.178.1) 56(84) bytes of data.
64 bytes from 192.168.178.1: icmp_seq=1 ttl=64 time=15.3 ms

--- 192.168.178.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 15.367/15.367/15.367/0.000 ms
192.168.178.1 erreichbar
/Q/backup bereits vorhanden
/Q/backup leer, Mounten starten
mountComplete: //192.168.178.1/fritz.nas/Online-Speicher/FHEM_Backup /Q/backup cifs username=FHEMNAS,password=MEINPASS1,iocharset=utf8,sec=ntlm 0 0
mountComplete: //192.168.178.1/fritz.nas/Online-Speicher/FHEM_Backup /Q/backup cifs username=FHEMNAS,password=MEINPASS1,iocharset=utf8,sec=ntlm 0 0
mountComplete: //192.168.178.1/fritz.nas/Online-Speicher/FHEM_Backup /Q/backup cifs username=FHEMNAS,password=MEINPASS1,iocharset=utf8,sec=ntlm 0 0
mountComplete: //192.168.178.1/fritz.nas/Online-Speicher/FHEM_Backup /Q/backup cifs username=FHEMNAS,password=MEINPASS1,iocharset=utf8,sec=ntlm 0 0
mountComplete: //192.168.178.1/fritz.nas/Online-Speicher/FHEM_Backup /Q/backup cifs username=FHEMNAS,password=MEINPASS1,iocharset=utf8,sec=ntlm 0 0
mountComplete: //192.168.178.1/fritz.nas/Online-Speicher/FHEM_Backup /Q/backup cifs username=FHEMNAS,password=MEINPASS1,iocharset=utf8,sec=ntlm 0 0
mountComplete: //192.168.178.1/fritz.nas/Online-Speicher/FHEM_Backup /Q/backup cifs username=FHEMNAS,password=MEINPASS1,iocharset=utf8,sec=ntlm 0 0
/etc/fstab: Eintrag bereits vorhanden: //192.168.178.1/fritz.nas/Online-Speicher/FHEM_Backup /Q/backup cifs username=FHEMNAS,password=MEINPASS1,iocharset=utf8,sec=ntlm 0 0
Mounts werden aktualisiert
Mounten hat anscheinend nicht geklappt, skip.



Wäre wirklich super wenn mir hier jemand weiterhelfen könnte. Vielen Dank.
Kamilo



hermanski.k

OK habs. Hatte einen fehler in der fstab.

Würde nun aber weiter gerne meine alexa installation ins backup mit aufnehmen.

wie mache ich das? kann mir das jemand sagen? danke

mahowi

Einfach in die Zeile tar --exclude=backup -cvzf "/$localBackupDir/$(date +%y%m%d_%H%M%S)_fhem_backup.tar.gz" "/opt/fhem" &>/dev/null hinter /opt/fhem noch den Pfad zur Alexa-Installation eingeben.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

hermanski.k

muss dich dasmit einem leerzeichen anfügen oder einem bestimmten symbol

beispielpfad ../../opt/alexa-fhem

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

hermanski.k

Ich bitte nochmals kurz um Info. Kann mir jemand kurz konkret zu meinem Beispiel sagen wie ich dir Code Zeile erweitern muss. Vielen Dank

Gesendet von meinem SM-A310F mit Tapatalk


mahowi

Hallo Kamilo,

Du hättest es auch einfach ausprobieren können.  ;)

Es sollte eigentlich wie von Dir schon geschrieben funktionieren, wobei die Pfade, die Du sichern willst meines Wissens nach nicht unbedingt in Anführungszeichen gesetzt werden müssen, wenn sie keine Sonder- oder Leerzeichen enthalten.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

hermanski.k


THZ_Haus

Hallo,

perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup info backup starting now"
das Backup funktioniert, jedoch fehlen mir im Dummy "FHEM.Backup" die Readings.
Meine vermutung geht dahin, das mein Telnet Port mit SSL und Passwort geschützt ist und somit ein Rückschreiben der Readings verhindert.

Kann SSL und das passwort in dem backup.sh Skript hinzugefügt werden?
Solarview mit SAM BT, FHEM mit THZ 403 SOL, EDIMAX

dev0

Auch wenn es in diesem Thread off topic ist, könnte es prinzipiell so in der Art funktionieren, mit dem Passwort bin ich unsicher.

(echo password ; sleep 2 ; setreading trallala ; sleep 2) | openssl s_client -connect host:port

Völlig ungetestet und ob das letzte sleep heutzutage noch benötigt wird, habe ich auch nicht getestet, vor gefühlten 15 Jahren hätte openssl die Verbindung sonst zu früh geschlossen.

Einfacher wäre es aber einen zusätzlichen telnet Port zu öffnen, der nur Verbindungen von localhost zulässt und kein ssl und pwd verwendet.

JoWiemann

Ich habe hier: http://s6z.de/cms/index.php/homeautomation/fhem/34-fhem-befehle-auf-der-shell-ausfuehren folgendes gefunden.


Nach dem Umstieg auf Raspberry Pi habe ich festgestellt, dass der Aufruf perl fhem.pl <Port> "<Befehl>" ohne Probleme funktioniert. Eine Passtowrtangabe ist bei lokalen Aufrufen nicht nötig, wenn das Password in fhem.cfg mit globalpassword (anstatt password) angegeben wird.
...
define tPort telnet 7072 global
attr tPort globalpassword <PASSWORD>
...


Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

THZ_Haus

Habs jetzt so gelöst.
Die Beckup.sh wurde um folgende Zeilen geändert:

mytelnetPW="Telnet Passwort"
perl /opt/fhem/fhem.pl 7072 $mytelnetPW "setreading FHEM.Backup info

dann klappt es!
Solarview mit SAM BT, FHEM mit THZ 403 SOL, EDIMAX