Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Vorlage] Script für automatisches Backup steuerbar durch VIS

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Vorlage] Script für automatisches Backup steuerbar durch VIS

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      stoepselinho last edited by

      Hallo

      Super Arbeit die ihr alle macht.

      Hab gestern mal das Script ausprobiert. Über die VIS klappt es bei mir komischerweise nicht. Der Datenpunkt wird zwar gesetzt mit Uhrzeit aber in dem Ordner ist dann kein Backup zu finden.

      Über die Konsole klappt es wunderbar nur das kopieren auf die NAS nicht könnte an Netgear liegen meckert immer an den anmelde Daten rum obwohl die Stimmen.

      Wenn ich das Script starte ist mir aufgefallen das im Reiter Adapter nur noch die zu sehen sind die ich installiert habe. Alle anderen sind weg. Auch die Versionsnummern sind nicht mehr einsehbar. Ist das bei euch auch so? Außerdem hab ich das Gefühl das der iobroker sehr langsam wird und auch öfters abstürzt. Der Absturz ist mir dreimal passiert.

      Gruß

      1 Reply Last reply Reply Quote 0
      • simatec
        simatec Developer Most Active last edited by

        @peoples:

        @simatec:

        Ich probiere mich mal daran.

        Das minimale Backup sehe ich auch als Problem.

        Beim kompletten Backup sollte es nicht das Problem sein, das direkt auf einem gemouteten Laufwerk zu schreiben.

        Ich weiß allerdings nicht, ob man beim iobroker Backup auch ein Parameter für die Pfadangabe setzen kann `

        Naja im dümmsten Fall könnte man dann nicht den Ordner /backups/ als Mount-Ordner nehmen? `

        So ich habe da mal ein wenig rumgespielt und folgendes zur cifs Einbindung für dich gefunden.

        Habe es bei mir mal getestet und die Einbindung läuft so problemlos.

        also vor dem Backup würde ich folgendes machen:

        sudo umount /opt/iobroker/backups
        

        Dann das einhängen:

        sudo mount -t cifs -o user=USERNAME,password=PASSWORT,rw,file_mode=0777,dir_mode=0777 //IP_ADDRESSE/FREIGABENAME/ORDNERPFAD /opt/iobroker/backups/
        

        und nach erfolgreichen erstellen des Backups wieder ein:

        sudo umount /opt/iobroker/backups
        

        Wenn der Script als root ausgeführt wird, kann das "sudo" entfallen

        Als Variablen im Javascript bräuchte man denn folgendes für die Einstellungen der Cifs Verbindung:

          • USERNAME
        - PASSWORT
        
        - IP_ADDRESSE
        
        - FREIGABENAME
        
        - ORDNERPFAD (wie auch bei FTP) 
        

        Ich habe das ganze mal händisch getestet und ein Backup erstellt.

        Es funktioniert alles ohne Probleme und das Backup wird direkt im Cifs-Laufwerk erstellt.

        1 Reply Last reply Reply Quote 0
        • simatec
          simatec Developer Most Active last edited by

          @peoples:

          Schreibe die Zeit Mal ohne Sekunden händisch in den Datenpunkt. HH:mm ohne SS

          Was passiert dann? `

          Lief bis heute alles sauber durch.

          Und auf einmal … heute wurde kein Backup erstellt ...

          Habe dann nochmal händisch die Zeit im Datenpunkt geändert und es lief.

          Gefühlt passiert es aber nur, wenn ich nicht im iobroker.admin eingeloggt bin :?

          1 Reply Last reply Reply Quote 0
          • S
            stoepselinho last edited by

            Weis jemand wie man eine WD Cloud einbindet mit dem Upload? oder einen Netgear Stora?

            1 Reply Last reply Reply Quote 0
            • Peoples
              Peoples last edited by

              Naja kannst du da keinen ftp-user einrichten dem du Schreibrechte auf ein bestimmtes Verzeichnis gibst?

              1 Reply Last reply Reply Quote 0
              • Peoples
                Peoples last edited by

                @simatec:

                Gefühlt passiert es aber nur, wenn ich nicht im iobroker.admin eingeloggt bin :? `

                Kann ich mir leider nicht erklären, bei mir läuft das seit dem einrichten (als ich den ersten Post gemacht habe) anstandslos durch.

                1 Reply Last reply Reply Quote 0
                • simatec
                  simatec Developer Most Active last edited by

                  Ich werde es weiter beobachten.

                  Heute lief es wieder sauber durch.

                  1 Reply Last reply Reply Quote 0
                  • simatec
                    simatec Developer Most Active last edited by

                    Heute war wie schon letzten Sonntag wieder kein Backup erstellt wurden.

                    Nach Änderung der Zeit im Datenpunkt wurde es erstellt.

                    Habe das Gefühl, dass es immer nur an bestimmten Tagen passiert.

                    Die Datenpunkte habe ich alle verglichen und sind gleich.

                    Beobachte das weiter …

                    Habe mir extra ne Telegrammeldung erstellt, damit ich das ganze besser überwachen kann ...

                    Gesendet von iPhone mit Tapatalk

                    1 Reply Last reply Reply Quote 0
                    • Peoples
                      Peoples last edited by

                      Und dass das heute was mit der Zeitumstellung ist nicht möglich?

                      1 Reply Last reply Reply Quote 0
                      • simatec
                        simatec Developer Most Active last edited by

                        Nein glaub ich nicht.

                        Habe den Datenpunkt manuell auf eine Minute in die Zukunft gesetzt und das Backup startete sofort

                        Gesendet von iPhone mit Tapatalk

                        1 Reply Last reply Reply Quote 0
                        • BuZZy
                          BuZZy last edited by

                          Hallo Zusammen,

                          muss gestehen: ich habe mir nicht den ganzen Thread durchgelesen.

                          Habe mir nur das Script angesehen und dazu einen kleinen Hinweis:

                          ioBroker arbeitet viel "in Memory".. Und schreibt "so wenig wie möglich, so viel wie nötig" auf die Festplatte um die Schreib/Lesezugriffe gering zu halten. Das "große Backup" aus diesem Script stoppt ioBroker nicht bevor das ioBroker Verzeichnis gepackt wird. Das Backup enthält also höchstwahrscheinlich nicht die aktuellsten Daten/States/Objects.

                          Zitat dazu von Github:
                          ` > Databases

                          ioBroker uses "in memory" database to hold the data and saves it on disk with resonable intervals. There are two types of storage:

                          states (values)

                          objects (meta/configuration information)

                          States can be stored in "in memory" or in redis. Objects can be stored only in "in memory" DB. `

                          Gruß

                          1 Reply Last reply Reply Quote 0
                          • Peoples
                            Peoples last edited by

                            @BuZZy:

                            Das Backup enthält also höchstwahrscheinlich nicht die aktuellsten Daten/States/Objects. `

                            Das kann ich ehrlich gesagt nicht widerlegen noch bestätigen, ich kann nur sagen dass mir das nicht bewusst aufgefallen ist.

                            Dennoch werde ich das auf jeden Fall ändern denn ein nicht aktuelles Backup ist für die Katz.

                            Tausend Dank für den Hinweis!

                            1 Reply Last reply Reply Quote 0
                            • BuZZy
                              BuZZy last edited by

                              Ich denke eher dass die "Probleme" sich absolut in Grenzen halten..

                              Wenn es ganz blöd läuft fehlt eventuell ein Object oder die States sind nicht die aktuellsten oder so.. Aber große Probleme werden sich dadurch denke ich nicht ergeben.. Wollte bloß drauf aufmerksam machen dass der richtige Weg ist, ioBroker zu stoppen bevor man das ganze Verzeichnis sichert. 🙂

                              Gruß

                              1 Reply Last reply Reply Quote 0
                              • Peoples
                                Peoples last edited by

                                Und genau deswegen werde ich das auch so einpflegen.

                                Danke nochmal!

                                1 Reply Last reply Reply Quote 0
                                • simatec
                                  simatec Developer Most Active last edited by

                                  Ich habe den backup.sh Script mal für CIFS angepasst und auch das starten und stoppen für das komplette Backup.

                                  Des Weiteren habe ich den Pfad für das erstellen des kompletten Backups direkt in den IoBroker Backup Ordner gelegt.

                                  Das hat bei einer CIFS Verbindung den Vorteil, dass erst garnicht auf dem Raspberry oder der Gleichen geschrieben wird, sondern direkt auf dem CIFS Laufwerk.

                                  Für die CIFS Verbindung müsste nur der Javascript mit dem Variablen noch angepasst werden.

                                  Da bin ich nicht so der richtige Ansprechpartner 😉

                                  ##!/bin/bash
                                  
                                  # Beschreibung: Backupscript fuer IoBroker
                                  #
                                  # Basierend auf dem Script von Kuddel: http://forum.iobroker.net/viewtopic.php?f=21&t=9861
                                  #
                                  # Funktionen: - Erstellen eines normalen ioBroker-Backups
                                  #             - Erstellen eines Backups des ganzen ioBroker-Ordners
                                  #             - Optionales loeschen von Backups aelter x-Tage
                                  #             - Optionales weiterkopieren auf einen FTP-Server
                                  #
                                  #
                                  # Author: Steffen
                                  # Version: 1.0 - Erster Entwurf des Backupscripts
                                  # Version: 1.0.1 - Optionaler Upload auf FTP-Server
                                  #
                                  #
                                  # Verwendung: run bash backup.sh "[Backup_Typ|Namens_Zusatz|Loeschen_nach_X_Tagen|FTP_Host|FTP_Verzeichnis|FTP_User|FTP_Passwort]
                                  # run 'bash backup.sh '
                                  #
                                  STRING=$1
                                  echo $STRING
                                  IFS="|"
                                  VAR=($STRING)
                                  
                                  BKP_TYP=${VAR[0]}
                                  NAME_ZUSATZ=${VAR[1]}
                                  BKP_LOESCHEN_NACH=${VAR[2]}
                                  FTP_HOST=${VAR[3]}
                                  FTP_DIR=${VAR[4]}
                                  FTP_USR=${VAR[5]}
                                  FTP_PASS=${VAR[6]}
                                  CIFS_HOST=${VAR[7]}
                                  CIFS_DIR=${VAR[8]}
                                  CIFS_USR=${VAR[9]}
                                  CIFS_PASS=${VAR[10]}
                                  
                                  #Variable fuer optionales Weiterkopieren
                                  BKP_OK="NEIN"
                                  
                                  #Datum definieren
                                  datum=`date +%Y_%m_%d`
                                  #Uhrzeit bestimmten
                                  uhrzeit=`date +%H_%M_%S`
                                  #Stunde definieren
                                  stunde=`date +%H`
                                  
                                  ############################################################################
                                  #									   #
                                  # Optionaler Mount auf CIFS-Server                    			   #
                                  #                                                                          #
                                  ############################################################################
                                  
                                  	if [ -n "$CIFS_HOST" ]; then
                                  		echo
                                  		Backup-Pfad auf CIFS mounten
                                  		sudo umount /opt/iobroker/backups
                                  		sudo mount -t cifs -o user=$CIFS_USR,password=$CIFS_PASS,rw,file_mode=0777,dir_mode=0777 //$CIFS_HOST/$CIFS_DIR /opt/iobroker/backups
                                  		echo "--- CIFS-Server verbunden ---"
                                  	else
                                  		echo "--- Backup-Pfad wurde nicht auf CIFS-Server verbunden ---"
                                  	fi
                                  
                                  ############################################################################
                                  #									   #
                                  # Erstellen eines normalen ioBroker Backups                                #
                                  #                                                                          #
                                  ############################################################################
                                  
                                  if [ $BKP_TYP == "minimal" ]; then
                                  
                                  	echo
                                  #	Backup ausfuehren
                                  	echo --- Es wurde ein Normales Backup gestartet ---
                                  	iobroker backup
                                  	echo
                                  	echo --- Backup Erstellt ---
                                  	BKP_OK="JA"
                                  
                                  #	Backup umbenennen
                                  	mv /opt/iobroker/backups/$datum-$stunde* /opt/iobroker/backups/backupiobroker_minimal$NAME_ZUSATZ-$datum-$uhrzeit.tar.gz
                                  
                                  ############################################################################
                                  #									   #
                                  # Erstellen eines Backups des ganzen ioBroker-Ordners                      #
                                  #                                                                          #
                                  ############################################################################
                                  
                                  elif [ $BKP_TYP == "komplett" ]; then
                                  #	IoBroker stoppen
                                  	cd /opt/iobroker
                                  	iobroker stop
                                  	echo --- IoBroker gestoppt ---
                                  #	Ins ioBroker Backup wechseln um komplettes IoBroker Verzeichnis zu sichern
                                  	cd /opt/iobroker/backups
                                  	echo
                                  #	Backup ausfuehren
                                  	echo --- Es wurde ein Komplettes Backup gestartet ---
                                  	tar -czf $datum-$uhrzeit-backup_komplett.tar.gz --exclude="/opt/iobroker/backups" /opt/iobroker
                                  	echo
                                  	echo --- Backup Erstellt ---
                                  	BKP_OK="JA"
                                  
                                  #	Backup umbenennen
                                  	mv /opt/iobroker/backups/$datum-$stunde*_komplett.tar.gz /opt/iobroker/backups/backupiobroker_komplett$NAME_ZUSATZ-$datum-$uhrzeit.tar.gz
                                  # 	Iobroker restart
                                  #	cd /opt/iobroker
                                  	iobroker start
                                  	echo --- IoBroker gestartet ---
                                  
                                  else
                                  	echo "Kein gueltiger Backup Typ gewaehlt! Moegliche Auswahl: 'minimal' oder 'komplett'"
                                  fi
                                  
                                  ############################################################################
                                  #									   #
                                  # Optionales Loeschen alter Backups                                        #
                                  #                                                                          #
                                  ############################################################################
                                  
                                  if [ $BKP_OK == "JA" ]; then
                                  	if [ -n "$BKP_LOESCHEN_NACH" ]; then
                                  		echo
                                  #		Backups älter X Tage löschen
                                  		echo "--- Alte Backups entfernen ---"
                                  		find /opt/iobroker/backups -name backupiobroker_$BKP_TYP$NAME_ZUSATZ-*.tar.gz -mtime +$BKP_LOESCHEN_NACH -exec rm '{}' \;
                                  		sleep 10
                                  #		echo
                                  	else
                                  		echo "--- Es werden keine alten Backups geloescht ---"
                                  	fi
                                  
                                  ############################################################################
                                  #									   #
                                  # Optionaler Upload des Backups auf einen FTP-Server                       #
                                  #                                                                          #
                                  ############################################################################
                                  
                                  	if [ -n "$FTP_HOST" ]; then
                                  		echo
                                  #		Backup-Files via FTP kopieren
                                  
                                  		echo "--- Backup-File FTP-Upload ---"
                                  #               Verzeichnis wechseln
                                  		cd /opt/iobroker/backups/
                                  
                                  #		Befehl wird mit lftp ausgeführt somit muss das instaliert sein! (debian apt-get install lftp)
                                  
                                  		lftp -e 'cd '$FTP_DIR'/; put backupiobroker_'$BKP_TYP$NAME_ZUSATZ-$datum-$uhrzeit'.tar.gz; bye' -u $FTP_USR,$FTP_PASS $FTP_HOST
                                  		echo
                                  	else
                                  		echo "--- Backup-File wurde nicht auf ein anderes Verzeichnis kopiert ---"
                                  	fi
                                  ############################################################################
                                  #									   #
                                  # Optionaler Umount des CIFS-Servers                    		   #
                                  #                                                                          #
                                  ############################################################################
                                  
                                  	if [ -n "$CIFS_HOST" ]; then
                                  		echo
                                  		Backup-Pfad auf CIFS umounten
                                  		sudo umount /opt/iobroker/backups
                                  		echo "--- Umount CIFS Server ---"
                                  	else
                                  		echo "--- Backup-Pfad wurde nicht vom CIFS-Server getrennt ---"
                                  	fi
                                  	BKP_OK="NEIN"
                                  else
                                  	echo "Kein Backup erstellt!"
                                  fi
                                  

                                  @ peoples

                                  Falls das posten des Codes nicht gewollt ist, bitte sage mir Bescheid.

                                  Dann lösche ich ihn wieder und stelle ihn für deine Arbeit zur Verfügung.

                                  1 Reply Last reply Reply Quote 0
                                  • Peoples
                                    Peoples last edited by

                                    @simatec:

                                    @ peoples

                                    Falls das posten des Codes nicht gewollt ist, bitte sage mir Bescheid.

                                    Dann lösche ich ihn wieder und stelle ihn für deine Arbeit zur Verfügung. `

                                    Ne alles Ok.

                                    Bist du wohl ein Shell-Profi?

                                    Ich nämlich nicht :lol:

                                    Deshalb gleich ein paar Fragen:

                                    • Wenn ich das richtig verstehe fragst du ab ob ein Host hinterlegt ist und nur wenn dem so ist mountest du oder?

                                    • Beim löschen hast du ein "Sleep 10" eingebaut, braucht man das?

                                    • Muss der Mount als erstes erfolgen und der umount als letztes?

                                    1 Reply Last reply Reply Quote 0
                                    • simatec
                                      simatec Developer Most Active last edited by

                                      Nein ein Shell Profi bin ich nicht … aber ich verstehe es etwas 😄

                                      zu Frage 1: ja genau ... hab es genau so umgesetzt, wie du den FTP Part aufgebaut hast. Man könnte es aber sicher auch mit ner Variablen im Javascript machen. Wenn kein Host eingetragen ist, geht er nicht in die Schleife.

                                      zu Frage 2: den Sleep 10 habe ich mal reingemacht, da ich das Gefühl hatte, dass der umount zu schnell für den Löschvorgang nach x Tagen erfolgt und dementsprechend der CIFS vorm löschen getrennt wird.

                                      Da ich ja mit CIFS alles direkt auf dem Server mache und auch in das Backup Verzeichnis von iobroker mounte, darf der umount erst erfolgen, wenn der Löschvorgang erledigt ist.

                                      zu Frage 3: ja am Anfang hänge ich das Netzlaufwerk ein und wenn das Backup erstellt wurde wieder aus. Man könnte es theoretisch auch dauerhaft gemountet lassen, aber ich persönlich finde es so besser gelöst.

                                      Aktuell fehlen aber für eine Funktion noch die Var in deinem Javascript. Da wollte ich nicht rumspielen 😉

                                      1 Reply Last reply Reply Quote 0
                                      • Peoples
                                        Peoples last edited by

                                        Noch ein Paar Fragen:

                                        • Wenn man dann angibt dass CIFS genutzt werden soll, unmountest du das /opt/iobroker/backups/ - Verzeichnis und mountest den Nas als genau diesen Dateipfad richtig?

                                        • Wenn ich jetzt sage dass ich erstellte Backups löschen möchte die bspw. älter als 5 Tage sind, werden diese doch auf dem Nas gelöscht oder?

                                        • Wenn ich nun eine Variable machen würde die CIFS on/off heißt, die "IF-FTP-Upload-Bedingung" prüft ob diese "off", die "IF-CIFS-Bedingung" prüft ob diese "on" ist und die Daten der FTP Angaben auch für CIFS verwendet werden, müsste man doch nur eine weitere Variable an das Shell-Script übergeben (CIFS ja oder nein) oder liege ich da falsch?

                                        Und ein Problem noch:

                                        Wenn iobroker beim kompletten Backup gestoppt und wieder gestartet wird, müssten doch auch die ganzen Schedules des Javascripts weg sein da ja der JavaScript-Adapter neu gestartet wird oder irre ich mich da?

                                        1 Reply Last reply Reply Quote 0
                                        • Peoples
                                          Peoples last edited by

                                          @BuZZy:

                                          Das Backup enthält also höchstwahrscheinlich nicht die aktuellsten Daten/States/Objects. `

                                          BuZZy auch an dich habe ich noch eine Frage kann ich ioBroker "zwingen" das Memory ab zu speichern ohne IoBroker zu beenden? Denn ich glaube dass alle gesetzten Schedules gelöscht wären da ja auch der javascript-Adapter neu gestartet wird?

                                          1 Reply Last reply Reply Quote 0
                                          • simatec
                                            simatec Developer Most Active last edited by

                                            @peoples:

                                            Noch ein Paar Fragen:

                                            • Wenn man dann angibt dass CIFS genutzt werden soll, unmountest du das /opt/iobroker/backups/ - Verzeichnis und mountest den Nas als genau diesen Dateipfad richtig? `
                                              Richtig ich mache vorher einen umount. Falls aus irgendeinem Grund das Script vorher nicht sauber durchlief und der alte mount noch besteht.

                                            @peoples:

                                            • Wenn ich jetzt sage dass ich erstellte Backups löschen möchte die bspw. älter als 5 Tage sind, werden diese doch auf dem Nas gelöscht oder? `
                                              Ja damit würden auf dem NAS die Backups gelöscht werden. Ist wie hier schon diskutiert Geschmackssache. Meine persönliche Meinung ist, dass die letzten 10-20 Backups ja für den E-Fall ausreichend sind und man somit nicht händisch eingreifen muss.

                                            @peoples:

                                            • Wenn ich nun eine Variable machen würde die CIFS on/off heißt, die "IF-FTP-Upload-Bedingung" prüft ob diese "off", die "IF-CIFS-Bedingung" prüft ob diese "on" ist und die Daten der FTP Angaben auch für CIFS verwendet werden, müsste man doch nur eine weitere Variable an das Shell-Script übergeben (CIFS ja oder nein) oder liege ich da falsch? `
                                              Das wäre auch eine gute Lösung. Man müsste dann nur beachten, dass in der Pfadangabe des CIFS auch die Bezeichnung des Laufwerks mit drin steht.

                                            Bei mir z.B. "HARDDISK/backup/ioBrocker"

                                            @peoples:

                                            Und ein Problem noch:

                                            Wenn iobroker beim kompletten Backup gestoppt und wieder gestartet wird, müssten doch auch die ganzen Schedules des Javascripts weg sein da ja der JavaScript-Adapter neu gestartet wird oder irre ich mich da? `
                                            Ich bin mir nicht sicher, aber ich denke sämtliche States und schedules sollten erhalten bleiben.

                                            Habe den Script jetzt so mehrfach durchlaufen lassen und hatte bisher keine Probleme feststellen können.

                                            Werde es aber mal beobachten … 😉

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            832
                                            Online

                                            31.7k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            29
                                            283
                                            41425
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo