View previous topic :: View next topic |
Author |
Message |
tazinblack Veteran
Joined: 23 Jan 2005 Posts: 1146 Location: Baden / Germany
|
Posted: Mon Sep 11, 2006 6:28 am Post subject: Dateien austauschen |
|
|
Hallo zusammen,
ich bin auf der Suche nach ner Software, welche zentral auf einem Rechner läuft und für das Abholen und Zustellen von Dateien zuständig ist.
D.h. sie sollte in vordefinierbaren Abständen auf entfernten Rechnern (Linux, Unix, Windows) nachschauen ob Dateien zum Transfer bereitstehen, diese nach dem FIFO-Prinzip abholen und dem entsprechenden Ziel zustellen. Dabei sollte jeder Vorgang in einem Logfile Dokumentiert werden oder in ner DB.
Wenn der entfernte Rechner nicht erreichbar ist, wird einfach später probiert und die evtl. auszuliefernden Daten zwischengepuffert.
Das Ganze hätte ich mir eigentlich schon selbst gebastelt. Leider hab ich das Problem, das der Win FTP-Server bei den Dateizeiten nicht die Sekunden anzeigt, da wirds dann schwierig, die Reihenfolge nicht zu verlieren.
Wenn Windows da außen vor wäre, hätte ich vielleicht ne Mischung aus SSH und SFTP oder SCP genommen in Verbindung mit Key-Auth.
Mit sowas hab ich eigentlich recht gute Erfahrungen gemacht.
Kann mir da jemand nen Tip geben ? _________________ Gruß / Regards
tazinblack
_______________________________________________________
what's the point in being grown up if you can't be childish sometimes |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Mon Sep 11, 2006 7:29 am Post subject: |
|
|
Also das mit den Sekunden verstehe ich nicht ganz.
Ich würde es wie folgt machen (wenn ich es richtig verstanden habe).
Auf dem Client nen SSH-Server aufmachen und auf dem Server die Keys hinterlegen. Auf dem Server folgendes schematisches Script starten:
- leeres Verzeichnis mit Timestamp auf dem Server erzeugen (z.B. $dir="2006-09-11-06-30-00")
- connecte alle Clients und verschiebe deren Dateien im Ausgang auf den Server in $dir
- nun durchlaufe alle Verzeichnisse auf dem Server, älteste zuerst und versuche auf Zielclient zu verschieben, je Verzeichnis
-- wenn Zielclient erreicht
--- verschiebe Dateien auf Zielclients
--- wenn Verzeichnis leer, dann Verzeichnis löschen
- nach Wartezeit, beginne von vorn
D.h. die "Timestamp"-Verzeichnisse existieren solange bis die Dateien ausgeliefert wurden. Wird nun auf dem Client eine Datei abgelegt, die den gleichen Namen wie eine ältere Version hat, landet diese zwar zwei mal auf dem Server, in unterschiedlichen Verzeichnissn, aber durch das chronologische Abarbeiten wird dann die ggf. ältere Version durch die neuere auf dem Zielclient überschrieben. Möchte man das nicht kann man an den Dateinamen noch den Timestamp anhängen. Auch sollte man pro sendenden Client einen "Eingangsordner" auf dem empfangenden Client haben, um vorzubeugen das Clients die Dateien gleichen Namens senden sich nicht gegenseitig überschreiben. |
|
Back to top |
|
|
tazinblack Veteran
Joined: 23 Jan 2005 Posts: 1146 Location: Baden / Germany
|
Posted: Mon Sep 11, 2006 7:43 am Post subject: |
|
|
So ähnlich dachte ich auch,
aber unser Windowsadmin hat das noch nicht hinbekommen, dass man sich auf Win per SSH mit nem Schlüssel authentifizieren kann. (Keine Ahnung warum das nicht geht.)
Als nächstes dachte ich an FTP, aber wie gesagt, kann ich da nicht sehen, welche Datei zuerst geschrieben worden ist, wenn dieses innerhalb einer Minute geschehen ist. _________________ Gruß / Regards
tazinblack
_______________________________________________________
what's the point in being grown up if you can't be childish sometimes |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Mon Sep 11, 2006 9:48 am Post subject: |
|
|
tazinblack wrote: | Als nächstes dachte ich an FTP, aber wie gesagt, kann ich da nicht sehen, welche Datei zuerst geschrieben worden ist, wenn dieses innerhalb einer Minute geschehen ist. |
Das brauchst Du doch auch gar nicht sehen, wenn der Server die Dateien über sich selbst zum Empfänger verschiebt. |
|
Back to top |
|
|
tazinblack Veteran
Joined: 23 Jan 2005 Posts: 1146 Location: Baden / Germany
|
Posted: Mon Sep 11, 2006 6:03 pm Post subject: |
|
|
Na doch !
der Client schreibt mehrere Dateien kurz hintereinander.
Jetzt kommt der Server und will sie abholen um sie danach zuzustellen. Woher soll der jetzt wissen, welche dieser Dateien die älteste ist und damit zuerst verarbeitet werden muss ?
Wie willst Du das machen ohne ssh ? Wie gesagt liefert ftp nur Stunden und Minuten und sich per Schlüssel auf ner Win Kiste anzumelden klappt irgendwie nicht. _________________ Gruß / Regards
tazinblack
_______________________________________________________
what's the point in being grown up if you can't be childish sometimes |
|
Back to top |
|
|
Hilefoks l33t
Joined: 29 Jan 2003 Posts: 849 Location: Emden / Deutschland
|
Posted: Mon Sep 11, 2006 7:35 pm Post subject: |
|
|
Ist die genaue Reihenfolge den so wichtig? Wenn ja, könnte man die Dateien nicht mit einem Timestamp im Dateinamen speichern - und diesen vorm verschieben auf das Ziel wieder aus dem Dateinamen löschen?
MfG, Hilefoks |
|
Back to top |
|
|
tazinblack Veteran
Joined: 23 Jan 2005 Posts: 1146 Location: Baden / Germany
|
Posted: Tue Sep 12, 2006 6:16 am Post subject: |
|
|
Hilefoks wrote: | Ist die genaue Reihenfolge den so wichtig? Wenn ja, könnte man die Dateien nicht mit einem Timestamp im Dateinamen speichern - und diesen vorm verschieben auf das Ziel wieder aus dem Dateinamen löschen?
MfG, Hilefoks |
Jap, die Reihenfolge ist wichtig ! Mit dem Timestamp das wäre ne Möglichkeit, aber irgendwie hoffe ich noch auf ne Lösung, wo ich sagen kann, genau das ists. Vielleicht sollte ich doch mal versuchen, ob ich das mit ssh und Win hinbekomme. _________________ Gruß / Regards
tazinblack
_______________________________________________________
what's the point in being grown up if you can't be childish sometimes |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Tue Sep 12, 2006 6:57 am Post subject: |
|
|
Also ich kann echt noch nicht nachvollziehen warum Du die Sekunden brauchst. Versuchs mir mal bitte zu erklären. (Ob es dann nun ssh, smb oder ftp etc. ist in meinem Beispiel egal.)
So wie ich das verstanden habe soll es so laufen:
- Client kopiert folgende Dateien in seinen Ausgang:
foo.txt (Timestamp: 12.09.2006 - 8:30:45)
foo2.txt (Timestamp: 12.09.2006 - 8:33:45)
foo3.txt (Timestamp: 12.09.2006 - 8:38:45)
- Server zieht sich diese Dateien
- Server verschiebt diese Dateien auf Empfänger (jetzt ist Timestamp Zeitpunkt des Schreibens auf den Client)
foo.txt (Timestamp: 12.09.2006 - 8:45:00)
foo2.txt (Timestamp: 12.09.2006 - 8:45:01)
foo3.txt (Timestamp: 12.09.2006 - 8:45:02)
In der Zwischenzeit hat der Ausgangsclient eine neuere Version von foo.txt in den Ausgang kopiert:
foo.txt (Timestamp: 12.09.2006 - 8:46:19)
Diese landet dann beim nächsten Durchgang auf dem Empfangenden und entweder die überschreibt die erste Version oder sie wird um den Timestamp (Zeitpunkt des Lesens vom sendenden Client) ergänzt:
foo.txt (Timestamp: 12.09.2006 - 9:00:00) oder foo-06-09-12-09-00-00.txt (Timestamp: 12.09.2006 - 9:00:00) |
|
Back to top |
|
|
tazinblack Veteran
Joined: 23 Jan 2005 Posts: 1146 Location: Baden / Germany
|
Posted: Tue Sep 12, 2006 8:23 am Post subject: |
|
|
slick wrote: | Also ich kann echt noch nicht nachvollziehen warum Du die Sekunden brauchst. Versuchs mir mal bitte zu erklären. (Ob es dann nun ssh, smb oder ftp etc. ist in meinem Beispiel egal.)
|
Stell Dir vor der Client stellt in kurzer Zeit (innerhalb einer Minute) 100 Dateien zum Abholen bereit.
Diese müssen aber in der Reihenfolge, in der sie erzeugt worden sind abgearbeitet werden.
Jetzt kommt der Server holt die 100 ab und stellt sie auf den Zielclient.
Wie willst Du jetzt sicherstellen, dass die Datei, die zuerst erzeugt worden ist auch zuerst verarbeitet wird und nicht alles willkürlich durcheinander.
Beispiel :
Stell Dir vor, es handelt sich um Lagerbewegungen. Du stellst einen Karton 1 auf Platz A im Lager. Dann eine Box 2 auf Platz C.
Um jetzt genügend Platz für einen besonders langen Karton 3 zu haben stellst Du Karton 1 von Platz A nach Platz D.
Jetzt kann Du für Karton 3 die Plätze A,B,C nutzen.
Wenn diese Buchungen durcheinander kommen, stimmt irgendwann deine Lagerliste auf dem Rechner nicht mehr mit dem Bestand überein.
Aus diesem Grund ist die Reihenfolge wichtig. Ist hoffe, das ist jetzt nachvollziehbar !
Es handelt sich nicht um irgendwelche Dokumente sondern um ne einfache Art von Schnittstelle zwischen verschiedenartigen Systemen. _________________ Gruß / Regards
tazinblack
_______________________________________________________
what's the point in being grown up if you can't be childish sometimes |
|
Back to top |
|
|
STiGMaTa_ch Veteran
Joined: 28 Dec 2004 Posts: 1686 Location: Rüti ZH / Schweiz
|
Posted: Tue Sep 12, 2006 9:04 am Post subject: |
|
|
tazinblack wrote: | Stell Dir vor der Client stellt in kurzer Zeit (innerhalb einer Minute) 100 Dateien zum Abholen bereit. |
Ich kapiere immer noch nicht ganz wozu dir dann die Sekunden wichtig sind
Wenn du mehr als 60 Dateien pro Minute erstellst, dann haben zwangsläufig mehrere Dateien die selbe Stunde:Minute:Sekunde. Denn bei 100 Dateien pro Minute wird etwas weniger als die hälfte der Dateien den selben Zeitstempel haben wie eine andere Datei. Du muesstest also wenn schon einen Timestamp drinn haben der auf Milisekunden runterbricht oder ein anderer Teil im Dateinamen wird für die Identifikation verwendet.
Und wenn du anhand dieses anderen Teiles des Dateinamens eruieren kannst welche Datei zuerst da war, dann solltest du dieses Schema doch auch für alle 100 Dateien anwenden können.
Oder übersehe ich da was?
Beispiel:
Um 15:32:12 werden foo001 und foo002 erzeugt. Beide haben den selben Timestamp. Das bedeutet, du musst über einen anderen Mechanismus in Erfahrung bringen welche Datei zuerst da war. Und das geht nunmal nur ueber den Dateinamen (In diesem Fall 001 und 002). Warum kannst du dann auf dem Zielsystem nicht einfach anhand dieser Merkmale die Dateien verarbeiten?
Lieber Gruss
STiGMaTa _________________ Ich bin Schuldknappe. Das bedeutet ich bin immer an allem Schuld. Und das nicht zu knapp! | Der alltägliche Familienwahnsinn auf meinem BLOG |
|
Back to top |
|
|
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Tue Sep 12, 2006 9:40 am Post subject: |
|
|
STiGMaTa_ch wrote: | tazinblack wrote: | Stell Dir vor der Client stellt in kurzer Zeit (innerhalb einer Minute) 100 Dateien zum Abholen bereit. |
Ich kapiere immer noch nicht ganz wozu dir dann die Sekunden wichtig sind
Wenn du mehr als 60 Dateien pro Minute erstellst, dann haben zwangsläufig mehrere Dateien die selbe Stunde:Minute:Sekunde. Denn bei 100 Dateien pro Minute wird etwas weniger als die hälfte der Dateien den selben Zeitstempel haben wie eine andere Datei. Du muesstest also wenn schon einen Timestamp drinn haben der auf Milisekunden runterbricht oder ein anderer Teil im Dateinamen wird für die Identifikation verwendet.
Und wenn du anhand dieses anderen Teiles des Dateinamens eruieren kannst welche Datei zuerst da war, dann solltest du dieses Schema doch auch für alle 100 Dateien anwenden können.
Oder übersehe ich da was?
Beispiel:
Um 15:32:12 werden foo001 und foo002 erzeugt. Beide haben den selben Timestamp. Das bedeutet, du musst über einen anderen Mechanismus in Erfahrung bringen welche Datei zuerst da war. Und das geht nunmal nur ueber den Dateinamen (In diesem Fall 001 und 002). Warum kannst du dann auf dem Zielsystem nicht einfach anhand dieser Merkmale die Dateien verarbeiten?
Lieber Gruss
STiGMaTa |
Ich würde es auch so machen:
foo-jahr-monat-tag-laufende_nummer.endung.
Damit hast du das ganze Problem nicht und verschiebst einfach immer alles und trotzdem kann sich die Reihenfolge nicht verändern.
Nachteil: Du musst es hinbekommen, dass die Ausgabeprogramme auf den Clienten nen Dateinamen dynamisch erzeugen.
Tobi |
|
Back to top |
|
|
tazinblack Veteran
Joined: 23 Jan 2005 Posts: 1146 Location: Baden / Germany
|
Posted: Tue Sep 12, 2006 11:07 am Post subject: |
|
|
Ich gebe zu das mit den Sekunden max 60 pro Minute möglich sind.
Wobei ich z.Zt. mit 2-3 pro Minute rechne.
Natürlich ist das mit der Sequenz besser !
Werd ich wohl machen ! _________________ Gruß / Regards
tazinblack
_______________________________________________________
what's the point in being grown up if you can't be childish sometimes |
|
Back to top |
|
|
forrestfunk81 Guru
Joined: 07 Feb 2006 Posts: 567 Location: münchen.de
|
Posted: Tue Sep 12, 2006 1:58 pm Post subject: |
|
|
Hi,
weiß nicht ob du das noch brauchst, aber wenn du doch nen ssh Server auf Windows aufsetzten wills, versuch das doch mit cygwin. _________________ # cd /pub/
# more beer |
|
Back to top |
|
|
tazinblack Veteran
Joined: 23 Jan 2005 Posts: 1146 Location: Baden / Germany
|
Posted: Tue Sep 12, 2006 3:45 pm Post subject: |
|
|
forrestfunk81 wrote: | Hi,
weiß nicht ob du das noch brauchst, aber wenn du doch nen ssh Server auf Windows aufsetzten wills, versuch das doch mit cygwin. |
Das werd ich als erstes probieren !
Danke ! _________________ Gruß / Regards
tazinblack
_______________________________________________________
what's the point in being grown up if you can't be childish sometimes |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Tue Sep 12, 2006 6:24 pm Post subject: |
|
|
du solltest dabei auch an Spezialfälle denken...
soweit ich es verstehe holt eine zentrale Maschine die Dateien von den umliegenden Maschinen ab, korrekt?
Was aber wenn gerade während dieser Abholprozess läuft von Client-A eine neue Datei erstellt wird?
Entweder wird sie nicht beachtet und wird im nächsten Durchlauf mitgenommen - Glück gehabt
oder sie wird mitgenommen ist aber zu diesem Zeitpunkt noch gar nicht fertig erstellt - Datensalat, Pech gehabt
oder aber der Fetchprozess will sie holen darf aber nicht weil sie noch vom Erstellprozess gelockt ist und fällt auf die Nase - Pech gehabt
Läßt sich am simpelsten dadurch umgehen alle neu erstellten Daten erstmal in einem /holmich/tmp-Ordner zu erstellen und erst wenn die Datei komplett geschrieben wurde mittels move datei .. in das eigentliche Verzeichnis aus dem geholt wird verschoben wird. Minimiert das Zeitfenster für obige Fehler auf ein absolutes Minimum.
Außerdem solltest du natürlich nach dem Abholen auf dem Server noch checken ob die Dateien richtig übertragen wurden - i.d.R. genügt hier ein Vergleich der Dateigröße auf Client und Server.
Und natürlich nicht das Löschen 'drüben' vergessen, sonst holst du die Daten mehrfach. _________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself |
|
Back to top |
|
|
tazinblack Veteran
Joined: 23 Jan 2005 Posts: 1146 Location: Baden / Germany
|
Posted: Tue Sep 12, 2006 6:59 pm Post subject: |
|
|
Think4UrS11 wrote: | du solltest dabei auch an Spezialfälle denken...
soweit ich es verstehe holt eine zentrale Maschine die Dateien von den umliegenden Maschinen ab, korrekt?
Was aber wenn gerade während dieser Abholprozess läuft von Client-A eine neue Datei erstellt wird?
Entweder wird sie nicht beachtet und wird im nächsten Durchlauf mitgenommen - Glück gehabt
oder sie wird mitgenommen ist aber zu diesem Zeitpunkt noch gar nicht fertig erstellt - Datensalat, Pech gehabt
oder aber der Fetchprozess will sie holen darf aber nicht weil sie noch vom Erstellprozess gelockt ist und fällt auf die Nase - Pech gehabt
Läßt sich am simpelsten dadurch umgehen alle neu erstellten Daten erstmal in einem /holmich/tmp-Ordner zu erstellen und erst wenn die Datei komplett geschrieben wurde mittels move datei .. in das eigentliche Verzeichnis aus dem geholt wird verschoben wird. Minimiert das Zeitfenster für obige Fehler auf ein absolutes Minimum.
Außerdem solltest du natürlich nach dem Abholen auf dem Server noch checken ob die Dateien richtig übertragen wurden - i.d.R. genügt hier ein Vergleich der Dateigröße auf Client und Server.
Und natürlich nicht das Löschen 'drüben' vergessen, sonst holst du die Daten mehrfach. |
Jap, sowas beschäftigt mich auch ! Neue Dateien werden erst mit Endung .tmp geschrieben und erst wenn sie fertig sind umbenannt. Und der Abholprozess beachtet .tmp-Dateien nicht. Für die Prüfung auf Dateikoruption während der Übertragung verwende ich normalerwiese sum. Keine Ahnung, ob cygwin unter Win das bietet. Mal sehen. _________________ Gruß / Regards
tazinblack
_______________________________________________________
what's the point in being grown up if you can't be childish sometimes |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Tue Sep 12, 2006 7:06 pm Post subject: |
|
|
Klar, Prüfsummen jeder Art sind deutlich besser als ein simpler Größenvergleich.
Ich habe nur oft das Problem bei solchen Geschichten das 'drüben' nur ein FTP-Zugang vorhanden ist und selbst da muß ich manchmal noch betteln damit ein ls funktioniert - jedenfalls bis die erste defekte Datei übertragen wurde, dann gehts meistens schnell _________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself |
|
Back to top |
|
|
tazinblack Veteran
Joined: 23 Jan 2005 Posts: 1146 Location: Baden / Germany
|
Posted: Tue Sep 12, 2006 7:28 pm Post subject: |
|
|
Think4UrS11 wrote: | jedenfalls bis die erste defekte Datei übertragen wurde, dann gehts meistens schnell |
*lol*
Woher kenn ich das ! _________________ Gruß / Regards
tazinblack
_______________________________________________________
what's the point in being grown up if you can't be childish sometimes |
|
Back to top |
|
|
|