NEWS
[Vorlage] Backitup nun in der 3ten Version
-
Hallo Steffen,
Start und Stop des Scriptes bewirkt bei mir leider nur Folgendes: Unter Javascript.0 wird ein Verzeichnis 'System' mit einem Unterverzeichnis 'Iobroker' angelegt. Das Verzeichnis 'Iobroker' ist leer.
Habe das Script mehrfach laufen lassen. Es kommen keine Fehlermeldungen.
Hast du noch eine Idee, wo es haken könnte?
Gruß
Strizz `
Aktualisiere mal deine Objekte oben links im iobroker …
Gesendet von iPhone mit Tapatalk
-
Danke, das war es.
Werde jetzt mal weiter testen.
Strizz
-
Hallo Steffen,
Nur zur Info: Wenn ich das Programm jetzt starte, erhalte ich folgende Warnhinweise:
Der Datenpunkt BackitUp_V3 liegt bei mir allerdings auch unter javascript.0 > scriptEnabled > common > System.
Das Backup wird allerdings gemacht. Nur mit dem Kopieren auf die NAS hapert es zur Zeit noch.
Gruß
Strizz
-
wenn du das Script woanders hast musst du den veränderten Ort im Script anpassen.
Zeile 330, 331 sollte das sein
-
Der Datenpunkt BackitUp_V3 liegt bei mir allerdings auch unter javascript.0 > scriptEnabled > common > System. `
Verschiebe den Javascript mal bitte nach scriptEnabled.BackitUp_V3 (also ins Hauptverzeichnis.
Alternativ kannst du auch hier im Script den Pfad anpassen.
` > function WerteAktuallisieren() {
setState(instanz + "scriptEnabled.BackitUp_V3", false);
setStateDelayed(instanz + "scriptEnabled.BackitUp_V3", true, 1000); `
Das Backup wird allerdings gemacht. Nur mit dem Kopieren auf die NAS hapert es zur Zeit noch. `
Wo liegen genau deine Probleme?
Poste mal bitte deine Konfiguration.
-
Ich weiß dass wir als "Echte Männer" keine Anleitungen lesen und da nehme ich mich nicht aus, aber dass der Pfad für Script enabled angepasst werden muss steht da drin :lol:
Einmal unter Konfiguration und einmal bei möglichen Fehlern
-
Sorry, habe ich tatsächlich nicht gelesen. Habe nur gelesen, "ab hier nichts mehr ändern!" oder ähnlich. Da halte ich mich dann dran.
Das Script ist jetzt aber angepasst und läuft. D.h. die ad-hoc-Backups funktieren und werden auch auf meine Synology verschoben. Allerdings funktioniert das nur, wenn ich den Pfad ohne Volume-Namen eintrage, also '/backups/iobroker' und nicht '/volume1/backups/iobroker'. Auch war mir nicht bewusst, dass ich nach jeder Änderung der Konfigurationsdatenpunkte das Script neustarten muss, damit die neuen Werte übernommen werden. Steht wahrscheinlich aber auch in der Installationsanweisung.
Danke für die Hilfe und die tolle Arbeit.
Gruß
Strizz
-
Allerdings funktioniert das nur, wenn ich den Pfad ohne Volume-Namen eintrage, also '/backups/iobroker' und nicht '/volume1/backups/iobroker'. `
Nutzt du CIFS oder FTP?
Auch war mir nicht bewusst, dass ich nach jeder Änderung der Konfigurationsdatenpunkte das Script neustarten muss, damit die neuen Werte übernommen werden. Steht wahrscheinlich aber auch in der Installationsanweisung. `
Dann stimmt der Speicherort deines Scripts noch immer nicht mit dem im Script überein.
Wenn der passt, startet der Script automatisch bei Änderungen neu (ähnlich eines Adapters).
Prüfe das noch mal bitte und poste mal den Speicherort und die Zeilen im Script (siehe meines letzten Beitrags)
-
Das mit der Synology ohne die volume Angabe ist bei mir identisch
-
Hallo,
ich habe einige Anpassungen für das Skript.
Pfad
Ich habe meinen ioBroker auf dem Macmini unter OS X laufen. Der Pfad wird dann so geschrieben (ioBroker liegt im User-Ordner Dokumente):
var bash_script = 'bash /Users/pix/Documents/iobroker/backitup.sh '; // Pfad zu backup.sh Datei (OS X)
Diese Änderung muss auch im Bash Skript vorgenommen werden.
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.
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);
}****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");
});****Tests**** exec im Javascript-Adapter erlaubt. 1) Minimal backup Funktioniert leider nicht. Kann am Mac liegen. >! ```` 2018-06-19 19:06:18.628 - [32minfo[39m: javascript.2 script.js.Test.Test_BackitupV3_peoples: OneClick Minimal Backup gestartet 2018-06-19 19:06:18.631 - [32minfo[39m: javascript.2 script.js.Test.Test_BackitupV3_peoples: bash /Users/pix/Documents/iobroker/backitup.sh "minimal||5||||||||false|||||5" 2018-06-19 19:06:18.638 - [32minfo[39m: javascript.2 script.js.Test.Test_BackitupV3_peoples: backup_erstellen(minimal,,5,,,,,,,,false,,,,,5) 2018-06-19 19:06:28.739 - [32minfo[39m: javascript.2 script.js.Test.Test_BackitupV3_peoples: exec: minimal||5||||||||false|||||5 --- Es wurde ein Normales Backup gestartet --- error --- Ein normales Backup konnte nicht erstellt werden --- --- Alte Backups entfernen --- success --- Ueberpruefung auf alte Dateien und loeschen erfolgreich ---
- Komplett Backup
Funktioniert leider nicht. Kann am Mac liegen.
! ````
2018-06-19 18:57:52.830 - [32minfo[39m: javascript.2 script.js.Test.Test_BackitupV3_peoples: OneClick Komplett Backup gestartet
2018-06-19 18:57:52.834 - [32minfo[39m: javascript.2 script.js.Test.Test_BackitupV3_peoples: bash /Users/pix/Documents/iobroker/backitup.sh "komplett||5||||||||false|true||||5"
2018-06-19 18:57:52.841 - [32minfo[39m: javascript.2 script.js.Test.Test_BackitupV3_peoples: backup_erstellen(komplett,,5,,,,,,,,false,true,,,,5)
2018-06-19 18:58:12.977 - [32minfo[39m: javascript.2 script.js.Test.Test_BackitupV3_peoples: exec: komplett||5||||||||false|true||||5
--- IoBroker gestoppt ---
--- Es wurde ein Komplettes Backup gestartet ---
error --- Ein komplettes Backup konnte nicht erstellt werden ---
--- IoBroker gestartet ---
--- Alte Backups entfernen ---
success --- Ueberpruefung auf alte Dateien und loeschen erfolgreich ---3) CCU-Backup Das CCU Backup funktioniert leider nicht. Kann am Mac liegen. Konfiguration korrekt vorgenommen. Fehler-Log: >! ```` 2018-06-19 18:53:58.045 - [32minfo[39m: javascript.2 script.js.Test.Test_BackitupV3_peoples: OneClick CCU Backup gestartet 2018-06-19 18:53:58.048 - [32minfo[39m: javascript.2 script.js.Test.Test_BackitupV3_peoples: bash /Users/pix/Documents/iobroker/backitup.sh "ccu||5||||||||false|||||5" 2018-06-19 18:53:58.056 - [32minfo[39m: javascript.2 script.js.Test.Test_BackitupV3_peoples: backup_erstellen(ccu,,5,,,,,,,,false,,,,,5) 2018-06-19 18:53:58.177 - [31merror[39m: javascript.2 script.js.Test.Test_BackitupV3_peoples: cat: hm.login.response: No such file or directory cat: hm.login.response: No such file or directory >! ```` ****VIS**** Mein kleines iPad hat nicht genug Auflösung für die zur Verfügung gestellten Widgets. Ich habe etwas umgebaut und das Design an meine Bedürfnisse angepasst. Screenshot: ![261_vis.png](/assets/uploads/files/261_vis.png) 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. Das VIS Theme ist uiDarkness. Hab die CSS-Befehle direkt in das HTML Widget geschrieben. So, muss jetzt Abendessen kochen. Freu mich auf Feedback. Gruß Pix
-
Hallo Simatec,
ich glaube, ich habe den Fehler gefunden: Ich hatte das Script unter Backitup_V3 und nicht unter BackitUp_V3 abgespeichert. Das kleine 'u' war offensichtlich der Fehler.
Für den Upload auf meine Synology habe ich FTP eingeschaltet. Würde es gerne in den nächsten Tagen mal mit CIFS versuchen. Müssen da bestimmte Voraussetzungen auf der Synology gegeben sein? Wenn ich CIFS einschalte, erhalte ich folgende Meldungen:
Gruß
Strizz
-
Hallo,
was und wo muss ich ändern wenn ioBroker auf Windows 10 läuft?
Pfad zu ioBroker: C:\ioBroker
-
Hallo Simatec,
ich glaube, ich habe den Fehler gefunden: Ich hatte das Script unter Backitup_V3 und nicht unter BackitUp_V3 abgespeichert. Das kleine 'u' war offensichtlich der Fehler.
Für den Upload auf meine Synology habe ich FTP eingeschaltet. Würde es gerne in den nächsten Tagen mal mit CIFS versuchen. Müssen da bestimmte Voraussetzungen auf der Synology gegeben sein? Wenn ich CIFS einschalte, erhalte ich folgende Meldungen:
Error.PNG
Gruß
Strizz `
Du musst den / vorm Pfad wegnehmen und wahrscheinlich bei cifs das volume1 noch in der Pfadangabe mit angeben.
Aber wie gesagt ohne / am Anfang
-
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.