Skript für automatische Sicherung der Jfritz XML-Dateien

kleinc

Mitglied
Mitglied seit
1 Aug 2005
Beiträge
513
Punkte für Reaktionen
0
Punkte
0
Hallo Leute,

da bei Jfritz in letzter Zeit immer mal wieder Probleme mit Datenverlusten aufgetreten sind, habe ich ein Skript und eine Batchdatei erstellt, die unter Windows ohne Aufklappen eines lästigen DOS-Fensters die .xml-Dateien von JFritz in das Unterverzeichnis Backup\%date%_%time% kopieren, wobei %date% das aktuelle Datum und %time% die aktuelle Zeit ist. Dadurch kann man z.B. zeitgesteuert Sicherungskopien anlegen lassen, ohne dass vorige Sicherungen überschrieben werden.

In dem Archiv im Anhang befinden sich die Dateien save.cmd und save.vbs.

  • save.cmd ist die batchdatei, die das Anlegen des Unterordners und Kopieren der Dateien erledigt.
  • save.vbs ist ein kleines VB-Skript, das die Batchdatei aufruft ohne dass ein DOS-Fenster aufgeht.

Beide Dateien arbeiten mit relativen Pfaden, müssen also in das JFritz-Verzeichnis.

Nun kann man im Taskplaner einen täglichen oder stündlichen Job anlegen, der die save.vbs ausführt. Wen das DOS-Fenster nicht stört, der kann auch direkt die save.cmd ausführen.

Gruß,
Christian
 

Anhänge

  • jfritz-save.zip
    404 Bytes · Aufrufe: 145
@kleinc Du hast mich angeregt auch etwas beizutragen.

Datei windiff.exe ins Windowsverzeichnis kopieren. Das Programm überprüft ob die Datein auch alle geschrieben wurden.

Die backup.bat kann überall liegen.

Die Datei backup.bat öffnen und
set Quelle="C:\Programme\JFritz\*.xml"
set Ziel="S:\%backdat%\JFRitz"
editieren. Wobei %backdat% stehen bleiben muss.
Wenn ich nach S:\ und vor %backdat% etwas schreibe dann auch hier
set backupdir=S:\
das ändern.
Auch wenn das S:\ geändert wird, bei "backupdir" ändern.

Weitere Einstellungen:
echo Alte Dateien nach 5 Tagen loeschen.
Hier "skip=5" den Wert ändern wenn andere Tage gewünscht.
Wer das Prinzip verstanden hat kann damit wunderbar einen Sicherungsauftrag mehrere Ordner/Dateien erledigen.

Was ich jetzt nicht geprüft habe ob es mit der vbs-Datei funktioniert, wenn der Aufruf im der Datei geändert wird.
 

Anhänge

  • backup.zip
    64.5 KB · Aufrufe: 60
Zuletzt bearbeitet:
Die XMLs sichern

Hallo kleinc,

Bin der erste Tester, wies aussieht --> läuft super !
Feine Sache zur Sicherheit --> Hast Du prima gemacht.

Irgendwann muss man aber später das uralte Zeugs
im \Backup rauslöschen --> besser als Datenverlust,
der bei mir aber noch nicht aufgetreten war.

Gruß Wolfram


5050er Fbox mit 12.04.01, Jfritz 0.5.4
6000er 1und1 (real 3120,369), ISDN Agfeo 141
 
Wolfram schrieb:
Bin der erste Tester, wies aussieht --> läuft super !
Der zweite - ich war der erste. :) Schön dass es läuft, ist aber auch nix großartiges dran.

Feine Sache zur Sicherheit --> Hast Du prima gemacht.
Danke.

Irgendwann muss man aber später das uralte Zeugs
im \Backup rauslöschen
Ja, hab schon zu Robert gesagt, wenn wir wieder viel Zeit haben, erweitern wir das so, dass es Sicherungen älter als 2 Wochen oder so löscht.
Oder grad ne dementsprechende Funktion in JFritz einbauen.

besser als Datenverlust
In der Tat. :)

Gruß,
kleinc
 
kleinc schrieb:
Ja, hab schon zu Robert gesagt, wenn wir wieder viel Zeit haben, erweitern wir das so, dass es Sicherungen älter als 2 Wochen oder so löscht.
Oder grad ne dementsprechende Funktion in JFritz einbauen.
In JFritz ist das nätürlich besser.

Bei meinem wird aller z.B. 5 Tage gelöscht und es wir überprüft ob die Dateien korrekt geschrieben wurden.
 
Ronaldo schrieb:
Die Datei backup.bat öffnen und
set Quelle="C:\Programme\JFritz\*.xml"
set Ziel="S:\%backdat%\JFRitz"
editieren. Wobei %backdat% stehen bleiben muss.
Ich wollte es halt grade so machen, dass man nix editieren muss.

Bei meinem wird aller z.B. 5 Tage gelöscht und es wir überprüft ob die Dateien korrekt geschrieben wurden.
Sehe ich das richtig, dass einfach die letzten 5 Verzeichnisse beibehalten werden? Sichert jemand alle 2 Stunden, behält er somit nur die Logs der letzten 10 Stunden. Dann sollte man also den Wert erhöhen.

Was ich jetzt nicht geprüft habe ob es mit der vbs-Datei funktioniert, wenn der Aufruf im der Datei geändert wird.
Das wäre sicherlich noch ganz nett, denn das war eigentlich mein Hauptanliegen: Stillschweigend ohne DOS Fenster im Hintergrund. Dann ist natürlich auch die Überprüfung sinnlos - das Ergebnis sieht man ja nicht.
Ich denke, man kann sich darauf verlassen, dass es funktioniert.

Vielleicht hast du ja Lust, eine Kombination aus beidem zu machen: Sicherung in relativen Pfaden zu JFritz (muss nix editiert werden), ohne Überprüfung, gestartet über vb Skript und mit Lösch-Funktion (da wäre es allerdings schön, wirklich nach Datum zu gehen, und zwar großzügig, nur so alles älter als 2 Wochen oder so löschen).
 
Wann gelöscht wird kann ich einstellen, siehe "skip=5" hier fünf Tage.

Ok, an das jemand aller Stunden eine Sicherung macht, habe ich nicht gedacht. Da hier nur für jeden Tag ein Ordner angelegt wird. Der dann aller 5 (oder was eingestellt wird) gelöscht wird.

Ich glaube beide Scripte haben seine Berechtigung.
Bei Deinem muss nichts eingestellt werden.
Bei meinem kann ich mir raussuchen was wohin (andere Festplatte / Netzlaufwerk / Ordner) ich sichere. Dafür aber nur täglich.

Bei bieden gemeinsam ist ich muss jeweils ein Taskplanerdienst einrichten.
DIe Lösung in JFritz ein Backup einzubauen wird deshalb das beste sein.

Für diejenigen die keine Überprüfung durch windiff.exe möchten, ganz einfach folgende Zeilen löschen.
echo Starte Überprüfung >>%temp%\backup.log
start /w windiff.exe -Sdx %templog% -T %Ziel% %quelle%
find "different" %templog% >>%temp%\backup.log
Und natürlich braucht dann auch die Datei (windiff.exe) nicht ins Windowsverzeichniss kopiert werden.

Ob die vbs Datei mit geänderten Inhalt funktioniert kann ich nicht überprüfen. Mein System lässt mich keine vbs ausführen.
Wer es überprüfen möchte ganz einfach die backup.bat ins Jfritz-verzeichnis zu der save.vbs. Dann backup.bat in save.cmd umbenennen.
Müsste eigentlich funktionieren.
 
Zuletzt bearbeitet:
Ronaldo schrieb:
Wann gelöscht wird kann ich einstellen, siehe "skip=5" hier fünf Tage.
Nein, du stellst nur ein, wie viele Sicherungen behalten werden. Mit Zeit hat das rein gar nichts zu tun. Du schließt von deinem persönlichen Sicherungsverhalten auf das anderer. Nur weil du jeden tag 1x sicherst, tut das nicht zwangsläufig jeder. Wer nur alle 2 Tage sichert, behält die Sicherungen für 10 Tage...

Da die Ordner mit dem Datum beginnen, könnte man das auch heranziehen, um wirklich zu sagen, nach welcher Zeit gelöscht werden soll, aber ich brauche es nicht und hab jetzt keinen Bock, das einzubauen. :D

Ronaldo schrieb:
Bei meinem kann ich mir raussuchen was wohin (andere Festplatte / Netzlaufwerk 7 Ordner) ich sichere.
Das geht mit meinem doch auch: Einfach editieren. Der Vorteil ist: Man muss es nicht editieren.

Daher wollte ich im Sinne aller anregen, dass du deins mit relativen Pfaden (die kann man ja ändern wenn man will) und dem VB Script ausstattest, weil das meiner Meinung nach dann die beste Lösung ist (du benutzt auch mehr Schalter bei dem xcopy, da hast du dir wahrscheinlich auch mehr Gedanken gemacht wie ich).

Ist ja völlig egal ob hier jemand das eine oder andere benutzt. Überprüfung der Kopie und Debugging ist für mich hier, bei einem einfachen xcopy-Befehl, halt totaler Overkill.
 
Zuletzt bearbeitet:
So habe das ganze überarbeitet.

Beide Dateien ins Progammverzeichniss kopieren.
Mit Taskplaner einen Sicherungsjob erstellen. Siehe @kleinc im ersten posting

Was wie wo eingestellt wreden kann steht in der Datei save.cmd

Voreingestellt sind jetzt 14 Sicherungen die im Ordner "save" erhalten bleiben.
Das ganze mit Datum und Uhrzeit als Unterordner.

Hoffe so ist nun aus beiden Scripts das beste drin.
 

Anhänge

  • JFritz_save.zip
    893 Bytes · Aufrufe: 68
Zuletzt bearbeitet:
Super, das sieht gut aus.
 
Danke

funktioniert einwandfrei, vielen Dank

Gruß
Allando
 
Ja klappt super! Danke!

Habe mir noch eine Zwei-Zweiler-Batch erstellt, mit der ich zuerst sichere und dann JFritz starte.
Damit vergesse ich das Sichern nicht wieder :)
 
so, habe das hier in mein jfritz eingebaut, könnt ihr ja auch in die öffentliche version einbauen, wenn ihr wollt:

Code:
/**
 * @author Bastian Schaefer
 * 
 * JFritz besitzt die exklusive Erlaubnis diesen Quelltext zu nutzen.
 * Jegliche Nutzung in anderer Software bedarf der ausdrücklichen Erlaubnis
 * des Autors.
 */
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class CopyFile {

	private File[] entries;
	private FileInputStream[] in;
	private FileOutputStream[] out;
	private GregorianCalendar cal = new GregorianCalendar();
	private int numberOfFiles;
	private String directory, fileFormat, time, date, month, year;

	private void getFiles() {
		File dir = new File(directory);
		entries = dir.listFiles(new FileFilter() {
			public boolean accept(File arg0) {
				if (arg0.getName().endsWith(fileFormat))
					return true;
				return false;
			}
		});
		numberOfFiles = entries.length;

		in = new FileInputStream[numberOfFiles];

		for (int i = 0; i < numberOfFiles; i++) {
			try {

				in[i] = new FileInputStream(entries[i].getName());
			} catch (IOException ex) {
				System.err.println(ex.toString());
			}
		}

	}

	private void createDirectory() {
		time = cal.get(Calendar.HOUR) + "." + cal.get(Calendar.MINUTE);
		if (cal.get(Calendar.MINUTE) < 10) {
			time = cal.get(Calendar.HOUR) + ".0" + cal.get(Calendar.MINUTE);
		}
		if (cal.get(Calendar.AM_PM) == 0) {
			time = time + "_AM";
		} else {
			time = time + "_PM";
		}
		date = cal.get(Calendar.DATE) + ".";
		month = cal.get(Calendar.MONTH) + ".";
		year = cal.get(Calendar.YEAR) + "_";

		boolean success = (new File("backup"+File.separator+ date + month + year + time))
				.mkdirs();
		if (!success) {
			System.err.println("Directory creation failed");
		}
	}

	public void copy(String directory, String fileFormat) {
		this.directory = directory;
		this.fileFormat = fileFormat;
		getFiles();
		createDirectory();
		out = new FileOutputStream[numberOfFiles];
		for (int i = 0; i < numberOfFiles; i++) {
			try {
				System.out.println(entries[i].getName());
				out[i] = new FileOutputStream("backup" + File.separator + date + month + year
						+ time + File.separator + entries[i].getName());
				byte[] buf = new byte[4096];
				int len;
				while ((len = in[i].read(buf)) > 0) {
					out[i].write(buf, 0, len);
				}
				in[i].close();
				out[i].close();
			} catch (IOException ex) {
				System.err.println(ex.toString());
			} catch (ArrayIndexOutOfBoundsException ex) {
				System.err.println("No files available");
			}
		}
	}
}

so, weil der quelltext nicht dokumentiert ist ;), hier die anleitung:
Code:
CopyFile backup = new CopyFile();
backup.copy(".", "xml");
 
Zuletzt bearbeitet:
Dankomat

Grandios!

Danke für den/die Tip(s)... funzt! :D

Gruss,
Micha
 
Danke basc.

Ich habe das soeben in JFritz eingebaut. Kommt im nächsten Release.

Gruß,
Robert
 
Sauber. Werden wir bestimmt einbauen (Erlaubnis vorausgesetzt), wenn mehr Zeit da ist.
Die Objektorientierung wurde zwar auf die Spitze getrieben :), eine Funktion hätte es sicher auch getan, aber das passt.

Edit: Schweinehund, diesmal warst du schneller. :)
 
kleinc schrieb:
Sauber. Werden wir bestimmt einbauen (Erlaubnis vorausgesetzt), wenn mehr Zeit da ist.
Die Objektorientierung wurde zwar auf die Spitze getrieben :), eine Funktion hätte es sicher auch getan, aber das passt.

ja klar, erlaubnis habt ihr (ich liebe objektorientierung :D )

EDIT:
robot_rap schrieb:
Danke basc.

Ich habe das soeben in JFritz eingebaut. Kommt im nächsten Release.

Gruß,
Robert
dann muss ich mir dochmal einen sourceforge account anlegen, dass ich nicht immer 24h auf das cvs update warten muss :)
 
Zuletzt bearbeitet:
Mit einem Sourceforge-Account wirst du auch 24 Stunden auf das cvs update warten müssen. Nur Entwickler, die am Projekt beteiligt sind, haben sofortigen Zugriff.

Ich habe deine Klasse noch ein wenig angepasst. Fand das Datumsformat nicht so toll. Ich habe das nun in 2006.03.16_16.24.45 umgeändert.
 
robot_rap schrieb:
Mit einem Sourceforge-Account wirst du auch 24 Stunden auf das cvs update warten müssen. Nur Entwickler, die am Projekt beteiligt sind, haben sofortigen Zugriff.

Ich habe deine Klasse noch ein wenig angepasst. Fand das Datumsformat nicht so toll. Ich habe das nun in 2006.03.16_16.24.45 umgeändert.

zu spät, schon angemeldet :?

ja, stimmt, führende jahreszahl ist bei der ordnersortierung besser. habe ich nicht drangedacht..
 
Du wirst eh keine 24h warten müssen ;)
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.