NEWS
[Vorlage] Backitup nun in der 3ten Version
-
Hallo,
was und wo muss ich ändern wenn ioBroker auf Windows 10 läuft?
Pfad zu ioBroker: C:\ioBroker `
Dann musst du den Pfad im JavaScript und in dem shell anpassen.
Also /opt/iobroker durch deinen Pfad ersetzen.
-
Danke für dein super Feedback.
Zu den einzelnen Backups.
Kann es eventuell sein, dass in der shell die Pfadangabe nicht stimmt?
Standard ist das bkpdir=„/opt/iobroker/backups“
Bei dem CCU Backup ist mir in deinem Log aufgefallen, dass dort keine IP, User und PW der CCU angegeben sind.
-
@pix:Instanz
Zum Test habe ich das Skript in der Javascript.2 Instanz laufen. Kann man mit dem Befehl instance auch "verskripten" (https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#instance), muss aber nicht, da keine Vereinfachung für den Nutzer. `
Super Idee - ist bei mir schon eingepflegt und wird hochgeladen.@pix:Skript Neustart
Die Funktion WerteAktualliesieren() nutzt die Datenpunkte Scriptenabled für den Neustart des Skriptes. Dazu muss der Name des Skriptes (falls geändert) eingegeben werden. Das kann an umgehen durch die ioBroker Funktion name() (https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#name).
WerteAktuallisieren(); function WerteAktuallisieren() { let skriptname = name; // script.js.Test.Test_BackitupV3_peoples //startScript(skriptname, false); // dieses Skript wird neu gestartet <---- Ausprobieren, kann zu einer Schleife führen setState(name, false); setStateDelayed(name, true, 1000); }
`
Ebenfalls Top IdeeDas habe ich jetzt auch bei mir wie folgt eingepflegt und scheint zu funktionieren:
function WerteAktuallisieren() { runScript(name); log ('das Script wurde neu gestartet'); }
@pix:Log
Schön wäre noch eine Subscription on() auf die BackupState-Objekte (boolean). Kurze Log-Ausgabe, wenn das Backup in VIS ein/ausgeschaltet wurde. Regex bietet sich an
/* BEOBACHTEN DER BackupState Datenpunkte für LOG-Ausgabe */ on({id: /\.BackupState$/, change: 'ne' }, function(obj) { if (obj.state.val) log(obj.common.name + " eingeschaltet"); if (!obj.state.val) log(obj.common.name + " ausgeschaltet"); }); ```` `
Wenn ich das jetzt richtig verstanden habe möchtest du wissen ob ein Backup aktiv bzw. Inaktiv ist oder?
Aktuell ist es so wenn du den State on/off änderst bekommt man doch folgende Ausgabe im log:
javascript.0 2018-06-19 21:54:02.637 info script.js.Wandtablet.System.BackitUp_V3: Ein ccu Backup wurde um 03:00 Uhr jeden 7 Tag aktiviert javascript.0 2018-06-19 21:54:02.634 info script.js.Wandtablet.System.BackitUp_V3: Ein komplett Backup wurde um 02:30 Uhr jeden 20 Tag aktiviert javascript.0 2018-06-19 21:54:02.633 info script.js.Wandtablet.System.BackitUp_V3: Das minimal Backup wurde deaktiviert
Oder hab ich da jetzt etwas falsch verstanden?
@pix:Wie man im Screenshot sieht, habe ich schonmal angefangen, die Startzeiten in den Wertelisten anzupassen. Statt der "glatten" Zeiten zur vollen, viertel, halben und dreiviertel Stunde, habe ich jeweils 2min draufgeschalgen. Schließlich wird der ioBroker ggf. gestoppt. Da aber zu diesen runden Zeiten viele andere Skripte laufen, versetze ich das Backupskript. Schön wäre in diesem Zusammenhang eine globale Variable in den Einstellungen. Eine Art Verzögerung in Minuten für alle drei Backup-Arten. `
Wenn das wirklich gewünscht wird, dürfte das kein großes Problem sein, die Frage ist nur ob es Sinn macht für das ganze einen Datenpunkt im jeweiligen Backup zu erstellen (für jedes einen eigenen Versatz) oder ob das im Script reichen würde (für alle den gleichen Versatz) oder man es eben in Vis direkt anpasst (wie du eben). -
Hi zusammen. Erstmal vielen Dank für die tolle Backuplösung.
Derzeit setze ich noch v2 ein.
Ich hab n Multihostsystem und da hätte ich evetuell ne idee wie man da ein Komplettbackup erstellen könnte.
als erstes muss man die ssh-Schlüssel dem Slave vom Master (wo auch das Backupscript läuft) bekannt machen.
Das kannst de so machen
scp .ssh/id_rsa.pub root@<ip vom/slave-rechner="">:.ssh/authorized_keys</ip>
und dann müsstest Du in Deinem Script einen separaten Bereich machen wo alles vom Slave abgebacken wird.
Hier mal n Beispiel wie Du ein Komplettbackup über remote an Slave absetzt.
ssh root@ <ip vom/slave-rechner="">-t 'cd /opt/ && tar -czf backup_komplett.tar.gz --exclude="/opt/iobroker/backups" /opt/iobroker && exit'</ip>
exit am Ende kann man glaub ich weglassen aber das müsste man testen.
Du kannst natürlich auch n extra Verzeichnis für den Slave über SSH in das Verzeichnis (auf m Slave) backups mounten.
und dort dann das Backup ablegen.
Dazu müsste natürlich im Script der Slave extra definiert werden.
Was noch zusätzlich der hammer wäre wenn zum Zeitpunkt des Vollbackups eine Sicherung der States erstellt werden würde für den Fall der Verwendung von Redis. Wobei das als extra Sicherungsoption über VIS auch ne tolle Sache wäre.
Derzeit sichere ich meine States wie folgt:
!
/* Redis States speichern ! Skript speichert ioBroker States für den Fall eines Restores, damit Redis wieder arbeitet ! Output im Log: 2017-06-13 11:41:35.548 - [33mwarn[39m: javascript.0 State "javascript.0.scriptEnabled.Test.test_owntrack" not found Dateileichen werden mit Warnmeldung ausgegeben ! von Looxer http://forum.iobroker.net/viewtopic.php?f=8&p=67560#p67560 ! 13.06.2017 erstellt und angepasst (Pix) */ ! var pfad = "/mnt/Backup/states"; var instances = ['0','1','2','3']; // Instanzen des Javascript-Adapters ! // ab hier keine Anpassungen mehr nötig ! function schreibeStates(k) { var fs = require('fs'); // Modul, um externe Dateien zu schreiben log(instances[k]); var cacheSelectorState = $('state[state.id=javascript.' + instances[k] + '.*]'); cacheSelectorState.each(function (id, i) { var val = getState(id).val; var zk = "setState('" + id + "', " + val + ");\n"; if (typeof val === "string") zk = "setState('" + id + "', '" + val + "');\n"; var datei = pfad + '_' + zeitHolen().logdate + "_" + zeitHolen().logtime + "__" + instances[k] + ".txt"; fs.appendFileSync(datei, zk); }); log('Instance ' + instances[k] + ' States saved (for Redis)',"info"); } ! // Hauptfunktion für die Updates function main() { for (var j = 0; j < instances.length; j++) schreibeStates(j); } ! // aktuelle Zeit holen function zeitHolen () { jetzt = new Date(); var jahr = jetzt.getFullYear(); var monat = (jetzt.getMonth()+1 < 10) ? '0' + (jetzt.getMonth()+1) : jetzt.getMonth()+1; var tag = (jetzt.getDate() < 10) ? '0' + jetzt.getDate() : jetzt.getDate(); var wochentag = jetzt.getDay(); // startet am Sonntag mit 0 var stunde = (jetzt.getHours() < 10) ? '0' + jetzt.getHours() : jetzt.getHours(); var minute = (jetzt.getMinutes() < 10) ? '0' + jetzt.getMinutes() : jetzt.getMinutes(); var sekunde = (jetzt.getSeconds() < 10) ? '0' + jetzt.getSeconds() : jetzt.getSeconds(); return { 'logdate' : jahr + monat + tag, 'logtime' : stunde + '_' + minute + '_' + sekunde }; } ! // Startet zeitgesteuert schedule("50 23 * * *", main); ! // Startet 500ms verzögert nach Skriptstart // Funktion zum Test deaktiviert 25092017 setTimeout(main, 500); !
So hätte man von beiden Systemen ein Vollbackup.
Gruß
Johnny
-
Danke für dein super Feedback.
Zu den einzelnen Backups.
Kann es eventuell sein, dass in der shell die Pfadangabe nicht stimmt?
Standard ist das bkpdir=„/opt/iobroker/backups“
Bei dem CCU Backup ist mir in deinem Log aufgefallen, dass dort keine IP, User und PW der CCU angegeben sind. `
Hatte das Shell Skript auch angepasst~~@pix:~~Diese Änderung muss auch im Bash Skript vorgenommen werden. `
Allerdings reicht diese eine Zeile wohl nicht. Denn im Skript, zB im Bereich "Sicherung eines ganzen ioBroker Ordners" (ca. Zeile 122) wechselst du einmal in den ioBroker Ordner mit````
cd /opt/iobrokerAber über allem schwebt das Dilemma, dass OS X den __wget__-Befehl nicht kennt. Ich hab's heute Abend nicht geschafft, ihm das beizubringen. Es geht, aber ich hatte noch eine andere Baustelle und somit nicht die Muße. Vielleicht in ein paar Tagen. Wahrscheinlich ist es dann doch besser, endlich mal einen Raspi als Slave einzurichten, damit er u.a. solche Aufgaben übernehmen kann. Gute Nacht, Pix
-
` > simatec hat geschrieben:
Dann musst du den Pfad im JavaScript und in dem shell anpassen.
Also /opt/iobroker durch deinen Pfad ersetzen. `
So Richtig?
var bash_script = 'C:/ioBroker/backitup.sh '; // Pfad zu backup.sh Datei
LOG:
javascript.0 2018-06-20 01:05:05.425 info script.js.BackitUp_V3: exec: javascript.0 2018-06-20 01:05:05.231 info script.js.BackitUp_V3: OneClick Minimal Backup gestartet
Das mit dem shell anpassen bekomme ich nicht hin. Ist nicht für Windows glaube ich…..
-
Das mit dem shell anpassen bekomme ich nicht hin. Ist nicht für Windows glaube ich….. `
Ich werde die nächsten Tage mal testen, ob er auch unter Windows zum laufen gebracht werden kann.
-
@pix:Allerdings reicht diese eine Zeile wohl nicht. Denn im Skript, zB im Bereich "Sicherung eines ganzen ioBroker Ordners" (ca. Zeile 122) wechselst du einmal in den ioBroker Ordner mit
cd /opt/iobroker
und später benennst du in /opt auch das Backup um uvm. `Ja das stimmt … da müsste dann wirklich manuell Hand angelegt werden. Mit OS X habe ich das ganze bisher nicht getestet.
Nutze zwar auch einen MAC, aber der Script läuft bei mir auf dem Tinker Board und auf einem PI3 als Testumgebung.
-
Super, das wäre sehr cool.
-
Hmm Frage zum löschen der Backups.
Da steht ja löschen nsch x..Tage in der Doku. Wäre es nicht besser zu sagen, wieviel Backups man behalten möchte?
z.B. 5 und dann immer den ältesten löschen?
Gruß Peter
-
Prinzipiell kannst du das ja, indem du sagst alle 2 Tage ein Backup und Backups die älter sind als 11 Tage löschen
Was nicht heißt dass das keine gute Idee ist
-
So, ich habe mich nun auch einmal an die V3 gewagt.
Als erstes muss ich ein großen Lob aussprechen
wirklich Klasse gemacht.
Aber aktuell habe ich zwei Probleme:
1. Die Backup´s werden nicht auf meinen FTP übertragen ( Server ist online )
2. Die History zeigt bei mir leider nichts an
Ich habe den Pfad des Javascriptes in Zeile 60 geändert auf: <u>javascript.0.System.Backup</u> und alle Punkte der VIS angepasst. Soweit funktioniert alles bis auf die beiden oben genannten Punkte.
-
So, ich habe mich nun auch einmal an die V3 gewagt.
Als erstes muss ich ein großen Lob aussprechen
wirklich Klasse gemacht.
Aber aktuell habe ich zwei Probleme:
1. Die Backup´s werden nicht auf meinen FTP übertragen ( Server ist online )
2. Die History zeigt bei mir leider nichts an
Ich habe den Pfad des Javascriptes in Zeile 60 geändert auf: <u>javascript.0.System.Backup</u> und alle Punkte der VIS angepasst. Soweit funktioniert alles bis auf die beiden oben genannten Punkte. `
Hi,
zu 1.
hast du bei dem Verzeichnis von deinem Nas einen "/" vorangestellt? Denn der muss da sein, deswegen gings bei mir nicht!
zu 2.
wenn du deine Objekte später mal hier: <u>javascript.0.System.Backup</u> haben willst darfst du in Zeile 60 nur <u>System.Backup.</u> reinschreiben weil innerhalb des Scripts die Instanz zusammengesetzt wird. Wichtig ist auch der Punkt am Schluss!
Die History ist ein html mit Binding das musst du dann auch anpassen.
Am besten alles nochmal löschen und dann nur :
var pfad0 = 'System.Backup.'; // Pfad innerhalb der Instanz
in Zeile 60 eintragen und alles nochmal durchlaufen lassen.
-
So, ich habe mich nun auch einmal an die V3 gewagt.
Als erstes muss ich ein großen Lob aussprechen
wirklich Klasse gemacht.
Aber aktuell habe ich zwei Probleme:
1. Die Backup´s werden nicht auf meinen FTP übertragen ( Server ist online )
2. Die History zeigt bei mir leider nichts an
Ich habe den Pfad des Javascriptes in Zeile 60 geändert auf: <u>javascript.0.System.Backup</u> und alle Punkte der VIS angepasst. Soweit funktioniert alles bis auf die beiden oben genannten Punkte. `
Hi,
zu 1.
hast du bei dem Verzeichnis von deinem Nas einen "/" vorangestellt? Denn der muss da sein, deswegen gings bei mir nicht!
zu 2.
wenn du deine Objekte später mal hier: <u>javascript.0.System.Backup</u> haben willst darfst du in Zeile 60 nur <u>System.Backup.</u> reinschreiben weil innerhalb des Scripts die Instanz zusammengesetzt wird. Wichtig ist auch der Punkt am Schluss!
Die History ist ein html mit Binding das musst du dann auch anpassen.
Am besten alles nochmal löschen und dann nur :
var pfad0 = 'System.Backup.'; // Pfad innerhalb der Instanz
in Zeile 60 eintragen und alles nochmal durchlaufen lassen. `
Also, Ich habe es nun geändert. Folgend sieht es aus:
<u>Zu Punk 1:</u>
Debugverlauf des minimalen Backups:
13:00:19.564 [info] javascript.0 script.js.common.System.Backup: OneClick Minimal Backup gestartet 13:00:19.566 [info] javascript.0 script.js.common.System.Backup: bash /opt/iobroker/backitup.sh "minimal||5|192.168.2.100|/Backup/iobroker/minimal/|ENTFERNT|netzwerk||||false||iobroker|pi|ENTFERNT|5" 13:00:19.567 [info] javascript.0 script.js.common.System.Backup: backup_erstellen(minimal,,5,192.168.2.100,/Backup/iobroker/minimal/,ENTFERNT,netzwerk,,,,false,,iobroker,pi,ENTFERNT,5) 13:02:04.080 [info] javascript.0 script.js.common.System.Backup: exec: minimal||5|192.168.2.100|/Backup/iobroker/minimal/|ENTFERNT|netzwerk||||false||iobroker|pi|ENTFERNT|5 --- MYSQL-Backup wird erstellt --- success --- MYSQL Backup wurde erstellt --- --- Es wurde ein Normales Backup gestartet --- Backup created: /opt/iobroker/backups/2018_06_21-13_01_40_backupiobroker.tar.gz success --- Ein normales Backup wurde erstellt --- --- Alte Backups entfernen --- success --- Ueberpruefung auf alte Dateien und loeschen erfolgreich --- --- Backup-File FTP-Upload wird gestartet --- backupiobroker_minimal-2018_06_21-13_00_19.tar.gz backupiobroker_mysql-iobroker-2018_06_21-13_00_19.sql error --- Backup-File wurde nicht auf ein anderes Verzeichnis kopiert --- error --- Backup-File wurde nicht auf ein anderes Verzeichnis kopiert ---
Auch mit den vorranstellen des " / " funktioniert es leider nicht.
<u>Zu Punkt 2:</u>
Eigenschaften des HTML für die Anzeige der History:
Allgemein:
{javascript.0.System.BackupHistory.Backup_history}
-
Starte das backup mal direkt über Konsole und gebe den Fehlerlog hier mal weiter.
Gesendet von iPhone mit Tapatalk
-
Starte das backup mal direkt über Konsole und gebe den Fehlerlog hier mal weiter.
Gesendet von iPhone mit Tapatalk `
Folgendes, ich habe nun ein Backup via Konsole gemacht und hier funktionierte es. Nun habe ich ein erneutes Backup via VIS gemacht und siehe da, es funktioniert auf einmal. auch das MYSQL wird übertragen, super. Der Fehler liegt denk ich am falschen lesen/überlesen der jeweiligen Datenpunkte, da diese einmal durcheinander angelegt werden.
Wenn man das Script das erste mal startet, legt dieses ja die Datenpunkte an. Nun ist es so, dass bei dem PW und dem Benutzer für FTP diese teilweise durcheinander angelegt werden –> Siehe Foto.
Wäre es zusätzlich vielleicht noch möglich, dass man das Backup der MYSQL seperat in einen Netzwerkordner laden kann? Da dieses ja jetzt immer in den Ordner kopiert wird, in dem das jeweilige Backup liegt.
Nun bleibt nur noch die nicht funktionierende History Anzeige :?:
-
@quorle:`Nur zur Info in deinem Javascript Log stehen alle deine Daten in Klartext
-
-
Kann es sein, dass die shell nicht auf einer Synology läuft?
Oder sitzt der Fehler wieder vor dem Bildschirm?
Ich dachte immer, dass Linux Linux ist?!
Bekomme folgende Fehlermeldungen:
javascript.0 2018-06-21 16:11:35.898 error opt/iobroker/backitup.sh: Zeile 128: `elif [ $BKP_TYP == "komplett" ]; then ' javascript.0 2018-06-21 16:11:35.898 error opt/iobroker/backitup.sh: Zeile 128: Syntaxfehler beim unerwarteten Wort `elif' javascript.0 2018-06-21 16:11:35.898 error opt/iobroker/backitup.sh: Zeile 87: /r>\r': Kommando nicht gefunden. javascript.0 2018-06-21 16:11:35.898 error opt/iobroker/backitup.sh: Zeile 81: /r>\r': Kommando nicht gefunden. javascript.0 2018-06-21 16:11:35.898 error opt/iobroker/backitup.sh: Zeile 80: /r>\r': Kommando nicht gefunden. javascript.0 2018-06-21 16:11:35.898 error opt/iobroker/backitup.sh: Zeile 79: /r>\r': Kommando nicht gefunden. javascript.0 2018-06-21 16:11:35.898 error opt/iobroker/backitup.sh: Zeile 76: /r>\r': Kommando nicht gefunden. javascript.0 2018-06-21 16:11:35.898 error opt/iobroker/backitup.sh: Zeile 73: /r>\r': Kommando nicht gefunden. javascript.0 2018-06-21 16:11:35.898 error opt/iobroker/backitup.sh: Zeile 70: /r>\r': Kommando nicht gefunden. javascript.0 2018-06-21 16:11:35.898 error opt/iobroker/backitup.sh: Zeile 67: /r>\r': Kommando nicht gefunden. javascript.0 2018-06-21 16:11:35.898 error opt/iobroker/backitup.sh: Zeile 64: /r>\r': Kommando nicht gefunden. javascript.0 2018-06-21 16:11:35.898 error opt/iobroker/backitup.sh: Zeile 61: /r>\r': Kommando nicht gefunden. javascript.0 2018-06-21 16:11:35.898 error opt/iobroker/backitup.sh: Zeile 60: /r>\r': Kommando nicht gefunden. javascript.0 2018-06-21 16:11:35.898 error opt/iobroker/backitup.sh: Zeile 43: /r>\r': Kommando nicht gefunden. javascript.0 2018-06-21 16:11:35.898 error opt/iobroker/backitup.sh: Zeile 37: /r>\r': Kommando nicht gefunden. javascript.0 2018-06-21 16:11:35.898 error opt/iobroker/backitup.sh: Zeile 36: /r>\r': Kommando nicht gefunden. javascript.0 2018-06-21 16:11:35.898 error script.js.Backup.BackitUp_V3: opt/iobroker/backitup.sh: Zeile 2: /r>\r': Kommando nicht gefunden. javascript.0 2018-06-21 16:11:35.848 info script.js.Backup.BackitUp_V3: OneClick CCU Backup gestartet
-
Ich vermute jetzt Mal ganz stark dass du das Shell-Script über einen windoof Editor geöffnet hättest. Versuch Mal von GitHub die Download Funktion zu nutzen, entpacke dann das heruntergeladene Archiv und kopiere es ohne es zu öffnen in das iobroker- Verzeichnis
Und sag Mal Bescheid ob das funktioniert