automatischer FTP-Upload

Backup, Restore und Transfer von Daten
Post Reply
bwar
Posts: 12
Joined: 2005-07-29 20:35
 

automatischer FTP-Upload

Post by bwar »

Hallo!

Ich habe ein Skript, welches automatisch per FTP Dateien mit bestimmten Namensinhalt downloaded.

Es geht hier um Backups. Einmal die Woche werden zweitägige backups auf einen Server geschoben.

Die Namensgebung ist fast immer gleich, da Backups von verschiedenen Admins geladen werden.

Bsp:

Code: Select all

back-server2-02.03.07.tar.gz
backup-sven-02.03.07.tar.bz2
Hier das Skript, was sich per FTP mit einem Quellserver verbindet und alle Dateien mit dem Inhalt "02.03.07" holt.

Code: Select all

#!/usr/bin/perl -w

use strict;
use Net::FTP;

my ($Server, $Login, $Password, $Path) = ('server-ip', 'username', 
'password', '/lokales-verzeichnis-quellserver');
my $localPath = '/lokales-verzeichnis-zielserver';
my $match = '02.03.07';

my $ftp = Net::FTP->new($Server, Timeout => 120, Debug => 0) || die "no 
connectionn";
$ftp->login($Login, $Password);
$ftp->cwd($Path) if ($Path);
$ftp->binary();
my @files = $ftp->ls;
foreach (@files) {
	if (/$match/) {
		print "get $_n";
		$ftp->get($_, $localPath.$_);
	}
}
$ftp->quit();
Nun habe ich einen Backupspace mit FTP-Zugang zum Server, der die Backups mit dem oben genannten Skript holt, hinzugemietet. Der Backupspace ist nur netzintern erreichbar, sodass der Server alle Backups holt und dann zum Backupspace hochladen muss.

Nun habe ich nicht viel Ahnung vom skripten und Perl. Die Suche im Forum und bei google brachte nicht viel aufschlussreiches.

Ich möchte idealer Weise das Skript so umschreiben, dass der Server alle Dateien mit einem bestimmten Namesinhalt auf den Backupspace läd. Es sind teilweise mehrere Backupdateien.


Könnte mir jemand Tipps geben, wie das zu bewerkstelligen ist, oder vllt. sogar ein Skript empfehlen?


mfg

bwar
timeless2
Posts: 415
Joined: 2005-03-04 14:45
Location: Paris
 

Re: automatischer FTP-Upload

Post by timeless2 »

Muss es unbedingt Perl sein? Shell-Skripte sind da wesentlich einfacher. In Kombination mit ncftp lässt sich das recht einfach handhaben:

Code: Select all

#!/bin/sh
ncftpput -u username -p passwort backup-server.de /verzeichnisaufdemserver /hier/ist/meine/lokale/sicherung
Das lässt sich noch ausbauen und den Bedürfnissen anpassen. Nähere Infos zu Shell-Skripten und zahlreiche Code-Schnipsel findest du sicher im Netz.
danu
Posts: 264
Joined: 2005-02-02 11:15
 

Re: automatischer FTP-Upload

Post by danu »

Bei mir siehts so aus:

Code: Select all

my @backup = glob("/srv/backup/cache/*.tar.gz");

foreach $file(@backup) {
	$ftp->put($file);
}
vielleich möchtest du nach dem Hochladen noch die Dateien löschen

Code: Select all

chdir("/srv/backup/cache");
opendir(DIR,".");
my @Eintraege = readdir(DIR);
closedir(DIR);
my $Anzahl = 0;
foreach (@Eintraege) {
 unless( -d $_) {
   $Anzahl+= unlink($_);
 }
}
bwar
Posts: 12
Joined: 2005-07-29 20:35
 

Re: automatischer FTP-Upload

Post by bwar »

Danke!

Hätte ich gewusst, dass man nur "put" an Stelle von "get" setzen muss... :oops:

Die gegeben Skripte schaue ich mir an, um evtl. etwas gutes zu übernehmem.

Vielen Dank nochmal.

mfg

bwar
bwar
Posts: 12
Joined: 2005-07-29 20:35
 

Re: automatischer FTP-Upload

Post by bwar »

Danu. Könntest du mir bitte deinen vollständigen Code zum Uploadskript zukommen lassen?

Ich habe ein paar Probleme und weis nicht, wo der Fehler liegt.

mfg
danu
Posts: 264
Joined: 2005-02-02 11:15
 

Re: automatischer FTP-Upload

Post by danu »

klaro

Code: Select all

#!/usr/bin/perl

use Net::FTP;
$ftp = Net::FTP->new("backup150.rootmaster.info");	# Hier Deinen Host eingeben
die "Konnte keine Verbindung aufbauen $!" unless $ftp;
$ftp->login("User", "Passwort");	# Hier Benutzername und Password eingeben

$dir = '/aktuell/'; #auf dem FTP Backup Server

$ftp->cwd($dir);

my @backup = glob("/srv/backup/cache/*.tar.gz"); # Lokal (Pfad - Wildcard - Dateiendung) 

foreach $file(@backup) {
	$ftp->put($file);
}

chdir("/srv/backup/cache");
opendir(DIR,".");
my @Eintraege = readdir(DIR);
closedir(DIR);
my $Anzahl = 0;
foreach (@Eintraege) {
 unless( -d $_) {
   $Anzahl+= unlink($_);
 }
}

$ftp->cdup();

$ftp->quit;
Ist bei dir das Perl CPAN Modul Net::FTP installiert, sonst funktioniert dieses Script nämlich nicht.

http://www.perl.com/CPAN/
Post Reply