Das war doch eine etwas grössere Baustelle

Bei mir lagen auch zig Dateien in current-week die da eigentlich nichts mehr verloren hatten...jaja, solange man das Backup nicht braucht schaut mannicht nach.
Bei mir gabs z.B. folgende Fehlermeldung
Code: Select all
Mon Nov 29 18:12:27 2004 ERROR :: moving remote file current-week/Monday-11-29-2004-0609-Full-ETC.tar.gz ::current-week/current-week
/Monday-11-29-2004-0609-Full-ETC.tar.gz: No such file or directory
Alle Ã?nderungen sind auf eigene Gefahr durchzuführen 8)
Kurzer Background:
Für das Rotate wird eine Dateiliste der Verzeichnisse current-week und last-week erstellt. Das Ergebnis wird in ein Array geladen und direkt mit einem rename weiterverarbeitet. Das ergibt dann so schöne FTP-Kommandos wie z.B.
Code: Select all
rename current-week/Sunday-11-28-2004-0600AM-Full.tar.gz current-week/current-week/Sunday-11-28-2004-0600AM-Full.tar.gz
Da musste also erstmal der Pfad raus.
Dann wurde noch . und .. renamed was als Ergbnis das Löschen des current-weekVerzeichnisses zur Folge hatte.
Lange Rede kurzer Sinn. Hier meine Ã?nderung an $ESRDIR/lib/Rotate.pm (nicht schön aber selten :-D )
Ab "sub rotate_ftp {" alles bis zum Dateiende durch die folgenden Zeilen ersetzen
Code: Select all
sub rotate_ftp {
my ($self) = shift;
my ($remote_dir,$ftp,$alabel) = @_;
if ($remote_dir) {
$ftp->cwd("$remote_dir") || return " ERROR :: can not change working directory ", $ftp->message;
}
my @lastfiles = $ftp->ls("last-week");
#Rotate the last full backup
foreach (@lastfiles) {
if ($_ =~ /last-week//) {
s/last-week///gi;
}
if ($_ =~ /Sunday.+-Full.+$alabel.+/) {
warn " ERROR :: moving remote file $_ ::" , $ftp->message if ! $ftp->rename("last-week/$_","weekly-archive/$_");
}
else {
if ( (! $_ == /./) || (! $_ == /../) ) {
warn " ERROR :: removing remote file $_ ::" , $ftp->message if ! $ftp->delete("last-week/$_");
}
}
}
@lastfiles = ();
#Move all the files from the current week directory to the last-week directory
my @curfiles = $ftp->ls("current-week");
foreach (@curfiles) {
if ($_ =~ /current-week//) {
s/current-week///gi;
}
if ( ((! $_ == /./) || (! $_ ==/../)) && ($_ =~ /.+$alabel.+/) ) {
warn " ERROR :: moving remote file $_ ::" , $ftp->message if ! $ftp->rename("current-week/$_","last-week/$_");
}
}
return('ok');
}
In $ESRDIR/esr-backup.pl Zeile 162 ändern in
Code: Select all
my $result = $f->rotate_ftp($ftp_cwd,$ftp,$alabel);
Diese Ã?nderungen berücksichtigen auch meine Ã?nderung bezüglich des "Ich-will-separate-Backupfiles-Hacks" aus dem Thread
http://www.rootforum.org/forum/viewtopic.php?p=202840
Wenn Du die dort beschriebenen Ã?nderungen nicht benötigst, kannst Du dir hier das Ã?ndern der esr-backup.pl schenken und in der Rotate.pm jeweils den String "$alabel","$alabel.+" und "&& ($_ =~ /.+$alabel.+/)" entfernen.
Ich habe die Ã?nderungen nur rudimentär auf einem Strato Rooti getestet. Mit einem absoluten Pfad als FTP_CWD in der esr-backup.cfg (das nächste Problem taucht auf, wenn man dort einen relativen Pfad angibt

) Ich habe mir ebenfalls nicht angeschaut wie sich das Script verhält wenn man das lokale Backup nutzt.
Ich hoffe, das löst auch dein Problem mit dem Rotate und ich glaube meine morgige Mail an den Entwickler wird etwas länger.
Gruß
Martin