Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]1240[/thread]

Sicheres verschieben von Files: FTP überträgt Files, Perl soll warten

Leser: 1


<< >> 10 Einträge, 1 Seite
Gast Gast
 2005-01-17 01:23
#12665 #12665
Ich scheitere an folgendem Problem:

Files werden per FTP und durch ein move von anderen Servern in ein Verzeichniss auf einem WIN NT 4 Server übertragen. Perl Script überwacht den den Ordner. Mein Problem: erkennen das die Datei fertig mit der Übertragung ist. Leider kein Einfluss auf den FTP Prozess.
flock hat nicht geholfen,
Überprüfung von Argumenten mit Hilfe von ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat(catfile($INPUT[0],$file));
dann sleep (5)
und erneutes test mit ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat(catfile($INPUT[0],$file)); geben kein Ansatz zur Aussage Datei ist vollständig da oder nicht.

Wer kann mir bitte an der Stelle etwas Unterstüzung geben ?

Vielen Dank

Rufio
jan
 2005-01-17 01:56
#12666 #12666
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
kannst du dem perlscript nicht irgendwie etwas über die datei mitteilen?
du könntest zum beispiel vielleicht die dateigröße im dateinamen verschlüsseln oder eine checksum im namen unterbringen - dann kann das perlscript bequem prüfen.
betterworld
 2005-01-17 02:01
#12667 #12667
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Kannst Du feststellen, ob der FTP Daemon die Datei noch zum Schreiben geoeffnet hat? Keine Ahnung, ob das unter NT geht, aber so mach ich das immer ;)
renee
 2005-01-17 08:30
#12668 #12668
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Erstelle Prüfsummen von den Dateiinhalten. Wenn beide Prüfsummen gleich sind, ist die Übertragung fertig...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
format_c
 2005-01-17 09:05
#12669 #12669
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Dazu kannst du zum Beispiel das in der Standard Distributution enthaltenen CPAN:Digest::MD5

Code: (dl )
1
2
3
4
5
6
7
    use Digest::MD5;

   my $file = shift || "/etc/passwd";
   open(FILE, $file) or die "Can't open '$file': $!";
   binmode(FILE);

   print Digest::MD5->new->addfile(*FILE)->hexdigest, " $file\n";

Edit:
Jedoch kann es bei dem Algorithmus vorkommen dass nicht immer der String eindeutig ist. Die Wahrscheinlichkeit ist zwar gering aber da. Alternative ist CPAN:Digest::SHA1.

Hier ein kleiner Geschwinigkeitstest, der wie erwartet ausgefallen ist:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use Digest::MD5;
use Digest::SHA1;
use Benchmark;
my $md5 = Digest::MD5->new();
my $sha1 = Digest::SHA1->new();
open FILE,'<',$0 or die $!;
binmode FILE;


sub check_md5 {
$md5->addfile(*FILE)->hexdigest(),"\n";
}

sub check_sha1 {
$sha1->addfile(*FILE)->hexdigest(),"\n";
}

timethese(10_000_000,{
'Digest::MD5'=> \&check_md5,
'Digest::SHA1' => \&check_sha1
}
);
_ _ END _ _
Benchmark: timing 10000000 iterations of Digest::MD5, Digest::SHA1...
Digest::MD5: 27 wallclock secs (26.73 usr + -0.01 sys = 26.72 CPU) @ 374251.50/s (n=10000000)
Digest::SHA1: 43 wallclock secs (43.20 usr + 0.00 sys = 43.20 CPU) @ 231465.41/s (n=10000000)



Gruß Alex\n\n

<!--EDIT|format_c|1105946299-->
Rufio
 2005-01-17 14:09
#12670 #12670
User since
2003-12-22
7 Artikel
BenutzerIn
[default_avatar]
Danke für Eure Beiträge.

Ich habe leider weder Einfluss auf den Dateinamen, noch auf den Zeitpunkt. Hätte ich den Einfluss auf Dateinamen würde ich es als *.temp übertragen und anschliessend auf echte Prefix switchen. So könnte man dem Problem aus dem Weg gehen.

Es muss doch eine Möglichkeit geben das anhand eines Merkmales der Datei zu erkennen.

Rufio
renee
 2005-01-17 14:33
#12671 #12671
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
was ist an der checksummen-methode so schlecht??

Das einzige, was mir sonst noch einfällt ist, dass Du die Dateigröße auf dem Server ermitteln könntest und immer wieder die Dateigröße auf dem dem Empfänger. Ändert die Größe sich nicht mehr, findet keine Übertragung mehr statt. Ist die Dateigröße auf dem Empfänger gleich der Größe auf dem Sender, dann war die Übertragung erfolgreich, ansonsten fehlerhaft...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Rufio
 2005-01-17 18:02
#12672 #12672
User since
2003-12-22
7 Artikel
BenutzerIn
[default_avatar]
Hallo Renee,

Problem ist, dass ich nicht derjenige bin, der die Datei überträgt. Ich bin nur für die Weiterverarbeitung zuständig.
Ich habe kein Zugriff und kein Einfluss auf den übertragenden Server.

Rufio
murphy
 2005-01-17 18:33
#12673 #12673
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
[quote=betterworld,17.01.2005, 01:01]Kannst Du feststellen, ob der FTP Daemon die Datei noch zum Schreiben geoeffnet hat? Keine Ahnung, ob das unter NT geht, aber so mach ich das immer ;)[/quote]
Analog zu fuser funktioniert unter Win32 das Programm Handle, das allerdings nicht zum Standardumfang von Windows gehört.

Auf jeden Fall sollte man das Problem damit lösen können.
When C++ is your hammer, every problem looks like your thumb.
Rufio
 2005-01-17 18:57
#12674 #12674
User since
2003-12-22
7 Artikel
BenutzerIn
[default_avatar]
Danke - das probiere ich aus.
Danke auch für die Links.

Rufio
<< >> 10 Einträge, 1 Seite



View all threads created 2005-01-17 01:23.