PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unix Grundlangen Verständnisproblem



falangkinjau
18.03.2006, 20:40
Einen schönen guten Abend Forum!

Hintergrundinformation:
Ein Perlscript listet mir den Inhalt eines Verzeichnis in eine Datei. Diese Einträge, also vorhandene Dateien, werden dann geholt. Das Verzeichnis liegt auf einem entfernten Rechner ( Unix-Maschine ).

Da die Geschichte auf einem Windowsrechner läuft und ich mich auf Active-Perl 5.6.x beschränken muß, habe ich das über einen Systemaufruf mit putty's sftp und putty's scp gelöst, da die Module net::ssh::perl und was es da noch so alles gibt nicht unter einer nativen Windowsumgebung compiliert werden kann. Cygwin kann ich nicht benutzen.

Bis hier läuft ja alles soweit gut und mit dem Perlscript selber gibt es ja keine Probleme.

So, und nun mein Verständnisproblem und was ich auch nicht testen kann bzw. nicht weiß:
In den Moment wo das Verzeichnis mit sftp gescannt wird, kann es doch sein das gerade eine sehr große Datei abgelegt wird.

Die Frage lautet nun:
Erhalte ich den Verzeichniseintrag beim Scannen schon mit, auch wenn der Kopiervorgang noch nicht abgeschlossen wurden ist?

Wenn ja, dann wäre das ja eine Katastrophe, da ich ja dann über scp diesen noch nicht abgeschlossenen Vorgang eventuell unterbreche, einen Fehler beim Download erhalte oder ich erhalte eine unvollständige Datei.

Für jeden Erklärung bzw. Tipp bin ich dankbar.

Wenn noch was unklar ist bzw. weitere Informationen benötigt werden so liefer ich die gerne nach.

Ich wünsche Euch einen schönen Samstag Abend
Ciao

cremi
18.03.2006, 20:47
Wenn ja, dann wäre das ja eine Katastrophe, da ich ja dann über scp diesen noch nicht abgeschlossenen Vorgang eventuell unterbreche, einen Fehler beim Download erhalte oder ich erhalte eine unvollständige Datei.


Bin da zwar jetzt nicht sicher, aber ich denke das es genau so ist - die datei wird angezeigt, auch wenn sie noch nicht komplett downgeloadet ist.

mit scp unterbrichst du nichts, da du ja nur kopierst - unvollständige datei kann sein

Wolfgang
18.03.2006, 22:10
Hallo

Für das richtige Modul für dein Windows schau dir mal das hier (http://www.soulcage.net/ppds/) an.
Ob und wie es unter Windows läuft, kann ich allerdings nicht testen.
Kenne mich mit Windows resp. Activeperl nicht gut aus.
Aber das Modul sollte für ActivePerl 5.6.x ohne Kompilierung über rpm installierbar sein.

Dein Problem verstehe ich allerdings (auch jenseits von Windows) nicht so recht.
Eventuell hilft ja ein entscheidender Auszug des Quellcodes und was du erreichen willst aus, das zu beheben. ;)

Gruß Wolfgang

falangkinjau
19.03.2006, 00:16
Hallo Wolfgang,
das mit dem Link werde ich mal nächste Woche probieren. Vielleicht bekomme ich ja das Modul doch noch eingebunden. Bin ja schon mal dran gescheitert. Und wenn es klappt, dann würde mir das die Aufrufe mit putty's scp und sftp ersparen und ist definitiv eleganter und effektiver.

Aber das ist nicht das Problem. Auch nicht der Sourcecode, der tut es ja.
Wenn am Sourcecode mal Bedarf besteht, wie das mit putty umgesetzt wird, kann ich den mal posten. Den Code habe ich jetzt nicht hier.

Vielleicht noch ein kleiner Nachtrag zu oben:
Das Script läuft z.B.: alle 30 min.
Die Dateien die gedownloaded werden sollen, werden von der Zeit her willkührlich abgelegt und sollen so schnell wie möglich abgeholt werden.

Wenn nun aber eine sehr große Datei in das Verzeichnis abgelegt wird und der Kopiervorgang noch nicht beendet ist und nun das Script startet, dann habe ich doch rein theoretisch ein Problem wie oben geschildert. Oder, vielleicht ist es auch keins.

Deswegen auch der Titel Unix Grundlagenproblem. Ich weiß halt nicht genau, ob mir das ls über sftp die Dateien zurück gibt, die physikalisch KOMPLETT auf der Platte liegen und nicht gerade da hinkopiert werden.

Das ist eigendlich alles was ich wissen wollte.

Selbst wenn es so ist wie von cremi beschrieben und von mir schon vermutet, dann ist das ja auch kein Problem. Die Lösung wäre dann, dass ich einfach ein Scan durchführe und die Datein noch nicht downloade. Es wird dann bei jedem weiteren Scan einfach mit dem Scan-1 verglichen. Hier wird die Dateigröße als Bezug genommen. Ist die gleich, dann wird die Datei geholt.

Einen schönen Sonntag wünscht Euch
falangkinjau

Xanti
19.03.2006, 07:05
Hm, als kleines Workaround könntest Du in das Verzeichnis vor dem Kopieren ein File anlegen, zum Beispiel "copy_in_progress", und dieses nach Beendigung des Kopierens löschen. Dann musst Du nur noch auf Vorhandensein dieses Files prüfen.
Oder du schaust per "ps | grep", ob der cp-Befehl aktiv ist. Vielleicht gehts auch mit "stat file".

Gruss, Xanti

edit: Du kannst mittels "ssh command" Befehle auf der Unixmaschine ausführen. Schau mal, ob putty das ebenfalls kann.