Ich möchte in regelmäßigen Abständen eine Datendatei von einem entfernten FTP-Server auf meinen Computer herunterladen. Sobald die Datei heruntergeladen ist, möchte ich ein anderes Skript aufrufen, das die Datei verarbeitet.
Meine Entwicklungsmaschine ist Mac OS X, die spätere Bereitstellungsumgebung ist Linux.
im Detail:
Es gibt einen öffentlichen FTP-Remote-Server, der vom Wetteramt betrieben wird und auf dem das Wetteramt Dateien mit Wettervorhersagen veröffentlicht. Dies ist nicht meine Maschine, ich kann nur von ihr herunterladen. Das Wetteramt legt hier alle sechs Stunden eine neue Datei an, die Uhrzeit ist Bestandteil des Dateinamens. Ich werde ein Tool auf meinem Computer haben, das die Daten in diesen Dateien verarbeiten kann. Ich bitte nicht um Hilfe bei der Entwicklung dieses Tools. Ich bitte um Hilfe beim Zusammenkleben der Teile, beim Planen der Downloads und der Ausführung des Tools.
Was ich machen will; was ich vorhabe zu tun:
Alle sechs Stunden möchte ich die neue Datei vom FTP-Server des Wetterdienstes herunterladen. Wenn dies fehlschlägt, möchte ich: eine E-Mail senden und den Download neu planen.
Wenn der Download nach sechs Stunden immer noch fehlschlägt, möchte ich aufhören, diese Datei abzurufen, da jetzt eine neue Datei mit einem neuen Namen vorhanden sein sollte.
Sobald die Datei erfolgreich heruntergeladen wurde, möchte ich mein Tool aufrufen, um die Datei zu verarbeiten. Wenn das Tool fehlschlägt, weil die Datei beschädigt ist, wird ein Fehler zurückgegeben, und ich möchte die Datei für den Download neu planen
Was wäre die Standardmethode, um dies zu automatisieren?
Ich weiß, dass ich Cron verwenden kann, um das Einrollen für den Download zu planen und ein Skript auszuführen, das die heruntergeladene Datei in regelmäßigen Abständen verarbeitet, und ich weiß, dass ich ein etwas komplexeres Skript oder eine Anwendung schreiben kann, die dies erledigt und Fehlerbehandlung, Neuplanung und Fehlerbehebung hinzufügt Senden von Status-E-Mails.
Eine meiner Anforderungen für dieses Projekt ist es, so wenig benutzerdefinierten Code wie möglich zu schreiben. Stattdessen sollte ich versuchen, vorhandene Standardtools zu verwenden und, wenn ich Code schreiben muss, den einfachsten Code zu schreiben . Der Grund dafür ist, dass der Code möglicherweise auf einer großen Anzahl von Computern installiert wird, die alle von verschiedenen Personen optimiert, angepasst und gewartet werden müssen, lange nachdem ich aus dem Projekt verschwunden bin, damit ich sie gut nutzen kann dokumentierte, gut unterstützte Tools so weit wie möglich.
Dies scheint eine so häufige Aufgabe zu sein, dass es Tools und Skripte im gesamten Internet geben muss, die von Leuten geschrieben wurden, die sorgfältig überlegt haben, was möglicherweise schief gehen könnte, wenn Sie eine Datei in regelmäßigen Abständen fehlerfrei von einem Remote-Server herunterladen und verarbeiten müssen Bearbeitung, Umplanung und Versand von Statusmeldungen.
Ist das, wofür 'Expect' ist?
Was würden Sie empfehlen?
quelle
Antworten:
Hmm, das ist eine breite, allgemeine Spezifikation, daher ist es schwierig, genau zu sein.
Werden auf allen Rechnern, die die Daten bereitstellen, Linux ausgeführt? Wenn ja, schauen Sie sich vielleicht an, wie Sie mit rsync (oder scp ) die Datendateien abrufen , da dies den Bedarf an Skripten für die Dateiübertragung verringert (nicht, dass es viel geben würde) und möglicherweise den Bedarf an "erwarten" beseitigt. was oft durch eine ungeplante Nachricht oder ein Ereignis ausgelöst werden kann.
Sie sagen nicht, welche "Verarbeitung" für die heruntergeladenen / übertragenen Dateien erforderlich ist, sodass es schwierig ist, dies zu kommentieren.
Die Neuplanung kann von cron durchgeführt werden oder im Falle eines Übertragungsfehlers kann es ausreichen, nur rsync oder den Exit-Status von scp zu lesen.
Wie sollen Statusmeldungen versendet werden? Wenn Sie eine E- Mail senden, können Sie den Standardbefehl " mail " in der Befehlszeile verwenden, oder es gibt ein nützliches Tool , mit dem Sie SMS-Nachrichten über ein angeschlossenes Modem senden können.
Auf den ersten Blick sieht es so aus, als würde eine kleine Menge bash-artiger Skripte genug Standardbefehle zusammenfügen, um das zu tun, was Sie wollen, so dass Sie keinen Code von einer anderen Stelle ausleihen müssen wahrscheinlich mehr Antworten bekommen.
quelle