Nötig ist zuerst ein Stück Code welches einen Datum in der Form 17-11-2002 zurückgibt.
Ich habe das hier wieder in eine Subroutine gepackt. So ist das ganze wieder in verschiedenen Scripten einbindbar.
# - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Datumsroutine
# - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub datumsausgabe {
($sec, $min, $stunde, $mtag, $mon, $jahr, $tag, $nr_tag, $isdst) = localtime(time);
$monat = $mon+1;
if($monat < 10) { $monat = "0$monat"; }
if($stunde < 10) { $stunde = "0$stunde"; }
if ($min < 10) { $min = "0$min"; }
if ($sec < 10) { $sec = "0$sec"; }
$jahr = 1900 + $jahr;
# Backupdatum erzeugen fuer die Verwendung als Backupverzeichnisname
# Es wird hier ein solches Datumsformat zurückgegeben: 17-11-2002
$datum_backup = "$mtag-$monat-$jahr";
}
Um nun abzufragen ob denn ein neuer Tag erreicht ist muss der Datum des aktuellen Tages in einer Datei gespeeichert werden.
Erläuterungen dazu:
- +< bedeutet das diese Datei zum lesen und schreiben geöffnet wird
- unless ($inhalt eq $datum_backup) { per unless (wenn nicht) werden nun der Dateiinhalt
und der tatsächliche Datum verglichen. Entsprechen sich die Werte nicht so wird der aktuelle Datum in die Datei geschrieben.
- Ist die Bedingung erfüllt das sich die Beiden Werte nicht entsprechen, so wird $datumswert = 1;, Das wird später als Backupauslöser eingesetzt.
- truncate löscht nun den Dateiinhalt und seek setzt Den Dateizeiger an den Dateianfang.
- Mit print DATUM $datum_backup; wird dann der aktualisierte Datum in die Datei geschrieben
open (DATUM, "+<$pfad/backuptime.dat");
$inhalt = <DATUM>;
unless ($inhalt eq $datum_backup) {
$datumswert = 1;
truncate(DATUM,0);
seek(DATUM,0,0);
print DATUM $datum_backup;
}
close (DATUM);
Das wichtigste bei der Backupgeschichte ist die Einbindung des File Copy Modules welches zur Perl Standardausstattung gehört.
# Modul File Copy
use File::Copy;
So, nun sind die Vorarbeiten erledigt, jetzt wird das Backup angelegt.
Zuerst wird mit if ($datumswert) abgefragt ob $datumswert Wahr ist.
Im nächsten Schritt wird das Backupverzeichnis angelegt und mit CHMOD 777 versehen. Das Verzeichnis backups
muss hier aber schon existieren!
if ($datumswert) {
mkdir "$pfad/backups/$datum_backup",0777;
chmod(0777, "$pfad/backups/$datum_backup");
Nun werden die Dateien angegeben die vom Ausgangsverzeichnis in das Backupverzeichnis kopiert werden sollen.
copy("$startpfad/userdaten.dat","$zielpfad/backups/$datum_backup/userdaten.dat");
copy("$startpfad/email.dat","$zielpfad/backups/$datum_backup/email.dat");
Anschließend wird der CHMOD gesetzt auf die Dateien.
chmod(0777, "$zielpfad/backups/$datum_backup/userdaten.dat");
chmod(0777, "$zielpfad/backups/$datum_backup/email.dat");
Will man ein ganzes Verzeichnis mit Dateien sichern deren Anzahl und Dateinamen nicht bekannt sind so kann dies auf diese Weise geschehen.
opendir(DIR,"$startpfad/Verzeichnis") or die "Kann Verzeichnis nicht oeffnen";;
@files=readdir(DIR);
closedir(DIR);
foreach(@files){
copy("$startpfad/Verzeichnis/$_","$zielpfad/backups/$datum_backup/$_",0777);
chmod(0777, "$zielpfad/backups/$datum_backup/$_");
}
} « Diese schließende Klammer beendet die bei if ($datumswert) { geöffnete If-Abfrage.
Dieses Beispiel hier ist nahezu beliebigst erweiterbar, man sollte allerdings beachten das unter Umständen auch noch weitere Verzeichnise
nötig werden die Dateien aufnehmen können. Hat man so eine Backuproutine einmal in Betrieb und es wird eine oder mehrere Datei(en) zerstört oder beschädigt kann man zumindest auf die
Daten des vorangegangenen Tages zurückgreifen.
|