Herunterladen und Verarbeiten einer Datei per FTP in festgelegten Intervallen, mit Fehlerbehandlung, Neuplanung und Statusmeldungen

687
compound eye

Ich möchte in regelmäßigen Abständen eine Datendatei von einem Remote-FTP-Server auf meinen Computer herunterladen. Nachdem die Datei heruntergeladen wurde, möchte ich ein anderes Skript aufrufen, das die Datei verarbeitet.

Mein Entwicklungscomputer ist Mac OS X, die endgültige Implementierungsumgebung ist Linux.

im Detail:

Es gibt einen entfernten öffentlichen FTP-Server, der vom Wetterbüro betrieben wird und auf dem das Wetteramt Dateien mit Wettervorhersagen speichert. Dies ist nicht mein Rechner, ich kann ihn nur herunterladen. Das Wetteramt legt alle sechs Stunden eine neue Datei hierher, die Zeit ist Teil des Dateinamens. Ich habe ein Werkzeug auf meinem Rechner, das die Daten in diesen Dateien verarbeiten kann. Ich bitte nicht um Hilfe bei der Entwicklung dieses Tools. Ich bitte um Hilfe, um die Teile zusammen zu kleben, die Downloads und die Ausführung des Tools zu planen.

Was ich machen will; was ich vorhabe zu tun:

alle sechs stunden möchte ich die neue datei vom ftp-server von weather bureau herunterladen. Wenn dies fehlschlägt, möchte ich: eine E-Mail senden und den Download erneut planen.

Wenn der Download nach sechs Stunden immer noch fehlschlägt, möchte ich den Versuch abbrechen, diese Datei abzurufen, da jetzt eine neue Datei mit einem neuen Namen vorhanden sein sollte.

Wenn die Datei erfolgreich heruntergeladen wurde, möchte ich mein Tool zur Verarbeitung der Datei aufrufen. Wenn das Tool fehlschlägt, weil die Datei beschädigt ist, wird ein Fehler zurückgegeben, und ich möchte die Datei zum Herunterladen neu planen

Was wäre der Standardstandard, um dies zu automatisieren?

Ich weiß, dass ich cron verwenden kann, um curl zum Herunterladen zu planen und ein Skript auszuführen, das die heruntergeladene Datei in regelmäßigen Abständen verarbeitet. Ich weiß, ich könnte ein etwas komplexeres Skript oder eine Anwendung schreiben, die dies tun würde, und Fehlerbehandlung, Umschuldung und Fehler hinzufügen Senden von Status-E-Mails.

Eine meiner Anforderungen an dieses Projekt ist jedoch, so wenig benutzerdefinierten Code wie möglich zu schreiben. Stattdessen sollte ich versuchen, standardisierte, bewährte und vorhandene Tools zu verwenden. Wenn ich Code schreiben muss, muss ich versuchen, möglichst einfachen Code zu schreiben . Der Grund dafür ist, dass der Code möglicherweise auf einer großen Anzahl von Maschinen installiert wird. Alle müssen angepasst werden, müssen angepasst werden und müssen von verschiedenen Personen gepflegt werden, lange nachdem ich aus dem Projekt verschwunden bin dokumentierte, so gut wie möglich unterstützte Werkzeuge.

Dies scheint eine gewöhnliche Aufgabe zu sein, es muss Werkzeuge und Skripte im gesamten Internet geben, die von Personen geschrieben wurden, die sorgfältig alles in Betracht gezogen haben, was möglicherweise schief geht, wenn Sie in regelmäßigen Abständen eine Datei mit einem Remote-Server herunterladen und verarbeiten müssen Bearbeitung, Umterminierung und Versand von Statusmeldungen.

Ist das, was 'Expect' ist?

Was würden Sie empfehlen?

1
Vielleicht wird dies eine bessere Antwort von stackoverflow erhalten, da sie mit den Programmierwerkzeugen vertraut sind. Und wenn ich dorthin migriere, würde ich, wenn möglich, idealerweise vorschlagen, es irgendwie zu tun, während Compound (Autor der Frage) wach ist und online ist, da die Dinge dort schnell beantwortet werden, und dann könnten viele Leute auf etwas anderes stehen! barlop vor 13 Jahren 0
@ barlop: Ich bin nicht sicher, ob dies eine reine Programmieranforderung ist - eher ein Skript, um einen Standardsatz von Befehlen aneinander zu reihen. Linker3000 vor 13 Jahren 0
@ Linker3000 decken sie aber auch ab barlop vor 13 Jahren 0

1 Antwort auf die Frage

1
Linker3000

Hmm, das ist eine breite, allgemeine Spezifikation, also schwer zu sagen.

  • Werden auf allen Rechnern, die die Daten bereitstellen, Linux ausgeführt? Wenn ja, schauen Sie sich die Verwendung von rsync (oder scp ) an, um die Datendateien herunterzuziehen, da dies die Notwendigkeit für das Skripting der Dateiübertragung verringert (nicht, dass es viel wäre) und möglicherweise die Notwendigkeit für 'erwartet' entfällt. Dies kann oft durch eine ungeplante Nachricht oder ein Ereignis ausgelöst werden.

  • Sie sagen nicht, welche "Verarbeitung" für die heruntergeladenen / übertragenen Dateien erforderlich ist. Das ist schwer zu kommentieren.

  • Die Terminverschiebung könnte durch cron abgewickelt werden oder im Falle eines Übertragungsfehlers reicht es aus, nur rsync oder den Beendigungsstatus von scp zu lesen.

  • Wie sollen Statusmeldungen versendet werden? Wenn Sie per E-Mail dann den standardmäßigen Befehlszeilenbefehl " Mail " verwenden, oder es gibt ein schönes Werkzeug, das SMS-Nachrichten über ein angeschlossenes Modem senden kann.

Auf den ersten Blick sieht es so aus, als würde eine kleine Menge von bash-Scripting genug Standardbefehle enthalten, um das zu tun, was Sie wollen, so dass Sie sich keinen Code von anderswo ausleihen müssen bekomme wahrscheinlich mehr Antworten.