[gelöst] FTP-Send vs Zwangstrennung

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
TomL

[gelöst] FTP-Send vs Zwangstrennung

Beitrag von TomL » 10.01.2018 20:11:42

Moin @ all

Aus einem kleinen Bash-Script heraus erstelle ich ein FTP-Order-Script in /tmp um eine bestimmte Datei via FTP zu senden. Das Bash-Script startet dieses Order-Script anschließend mit dem folgenden Befehl:

Code: Alles auswählen

$AppFtp -inv < $FTPJob  > $LogFile.sndftp
...was prinzipiell auch richtig gut funktioniert. Das Bash-Script läuft nach dem erfolgreichen Sende-Vorgang weiter und benachrichtigt mich per Email über den kompletten Job, also auch über das, was vorher schon passiert ist und beendet sich, wenn alles ohne Fehler durch ist.

Tja, und jetzt das Dilemma... die letzten 2 Tage habe ich keine Mail bekommen und bin auf die Suche gegangen, warum nicht. Ich habs gefunden, das Bash-Script war nach 14 Stunden noch aktiv und hat drauf gewartet, dass die FTP-Sende-Funktion zurückkommt... aber genau die ist gestorben. Und jetzt weiss ich auch warum.... wie es der perfekte Zufall will, hat sich die DSL-Zwangstrennung eingemischt und den Job während des Sendens sterben lassen.

Ich habe natürlich jetzt erst mal die Zwangstrennung um 2 Stunden nach hinten verlegt, aber das allein isses irgendwie nicht. Jetzt überlege ich, ob ich im Script eine Möglichkeit habe, das zu überwachen. Meine erste Idee war, den obigen Befehl mit & im Hintergrund laufen lassen und direkt dahinter im Script einfach eine vorgegebene Timeout-Zeit darauf zu warten, dass es fertig wird. Ich würde dafür einfach sowas wie ein State-File in /var/run setzen und mit Sende-Fini wieder löschen. Wenns nicht innerhalb des Timeouts fertig wird, kill ich den Hintergrund-Send-Job und benachrichtige mich umgehend über den Fehlschlag. Aber so richtig gefällt mir diese Idee noch nicht.

Gibt es vielleicht eine bessere Lösung? Hat jemand eine bessere Idee?
Zuletzt geändert von TomL am 28.01.2018 15:28:07, insgesamt 1-mal geändert.

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: FTP-Send vs Zwangstrennung

Beitrag von MSfree » 10.01.2018 20:42:04

Mich wundert, daß deine ftp-Verbindung nicht durch ein Timeout beendet wird. Nach einer Zwangstrennung müßten die Netzwekverbindungen nach etwa 20 Minuten per Timeout abbrechen.

Hast du schonmal daran gedacht, deine Datenübertragung mit weex statt mit ftp zu machen?

pferdefreund
Beiträge: 3791
Registriert: 26.02.2009 14:35:56

Re: FTP-Send vs Zwangstrennung

Beitrag von pferdefreund » 11.01.2018 10:35:42

Daten einfach nicht per FTP sondern per Mail verschicken. Der Mailserver merkt die Zwangstrennung und macht von sich aus einen retry.
(Nur wenn es nicht zu viel ist - manche Postfächer sind beim Empfang begrenzt). Oder mal nachschauen, ob es beim FTP-Programm einen Parameter für den Timeout gibt und - falls ja, dann ein $? <> 0 rauskommt. Dann das Ganze in einem Script wiederholen, bis $? 0.

TomL

Re: [gelöst] FTP-Send vs Zwangstrennung

Beitrag von TomL » 28.01.2018 15:44:57

Moin

Mit etwas Verspätung ist das Problem nun gelöst. Zunächst mal konnte ich das Problem mit der Verlegung der Zwangstrennung "nach hinten" provisorisch beheben und mich deshalb zuerst mit dringenderen Baustellen befassen. Danach habe ich kurz Weex überflogen, aber diese Kanone scheint mir für meinen kleinen Spatz wirklich zu groß zu sein. Die Idee mit einer Mail fand ich erst klasse, gerade weil auch der Sendevorgang erneut aufgenommen wird, aber das hätte mir dann andere neue Probleme bereitet, und zwar den Überlauf meines Postfaches. Und weil die Jobs alle mannlos laufen sollen, würden ständig notwendige manuelle Aufräumaktionen im Postfach dem zuwiderlaufen.

Aktuell wird -wie zuvor- immer noch aus meinem Bashscript heraus mit dem normalen Debian-FTP-Client gesendet. Das Script überwacht nun aber auch den Sendevorgang im 60-Sekunden-Takt, und wenn sich insgesamt 10 Minuten lang nix mehr tut, kriegt der FTP-Prozess einen Sigterm. Ich hatte zuerst überlegt, nach einem Fehler einen neuen Sendeversuch zu starten, aber ich habe mich dann dagegen entschieden. Dann hätte es nur wieder an einer neuen Logik im Programm gefehlt, die verhindert, dass bei einem kontinuierlichen Fehler der Job nicht unendlich neue Versuche startet. Jetzt bekomme ich über Erfolg oder Misserfolg nur eine Mail und kann dann abwägen, wie ich damit umgehe. Aber die grundsätzliche Annahme ist, dass es im Regelbetrieb ohne solche Störungen läuft.

Mit Tests konnte ich das gewünschte Verhalten bestätigen. Wenn ich das Interface während des Sendens nur schließe (down) und spätestens nach einigen Sekunden wieder öffne (up), passiert nix... der Job wieder wieder aufgenommen. Wenn ich jedoch eine DSL-Trennung am Router vornehme und bekomme danach einen neuen Prefix, wird der Job nicht wieder aufgenommen und FTP kehrt auch nicht zurück. Nach 10 Minuten wurde der FTP-Prozesse vom Script wie gewünscht beendet und das Script hat sich danach ebenfalls ordentlich mit seiner Benachrichtigungsmail beendet. Mit anderen Worten, Problem gelöst.

Danke für die Vorschläge. :THX:

Antworten