staging.inyokaproject.org

Neueste datei via FTp abholen in lokale datei kopieren

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

bura200

Anmeldungsdatum:
14. April 2017

Beiträge: 21

Hi würde gern Alarmmeldungen via ftp abholen. Alle 10 sekunden oder so. Die Alarmmeldungen werden auf einen Linux system automatisch gespeichert. Leider ändert sich der Dateiname mehrmals täglich. Diese abgeholten Meldungen würde ich gern lokal in eine datei speichern. Hat da jemand ne Idee???

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Hi bura200,

erstmal willkommen hier auf dem Forum !

Was die Ideen betrifft: klar haben wir eine menge Ideen, aber wir wissen nicht, was bei Dir passen könnte, wenn Du uns nicht ein bisschen mehr verrätst ...

Wie findest Du z.B. (wenn Du es mit Hand machst) die neueste Datei ? - gibt es dafür irgend einen Hinweis ?
Sonst hat natürlich auch ein Skript keinen Anhaltspunkt.

LG,

track

bura200

(Themenstarter)

Anmeldungsdatum:
14. April 2017

Beiträge: 21

Von Hand ist das ja kein Problem. Auf nem Linux Rechner werden Alarmmeldungen protokoliert. Die Idee ist nun diese Meldungen aus einer Datei via FTp abzuholen und auf anderen Linuxrechner in eine lokale Datei zu speichern. Ist ein Projekt für ein Fährschiff. Maschinenalarme werden protokolliert und sollen so an anderen Stellen des Schiffes via Netztwerk und Linux Client angezeigt werden. Das Problem ist auch noch das die Datei auf dem Ursprungsrechner mehrmals täglich ein neuen Dateinamen bekommt. Also automatisiert via FTP neue Datei suchen(alle x sek.), übertragen und in lokale Datei schreiben.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Na ja, ich hatte schon konkret gefragt, woher Du den Dateinamen (besonders wenn er sich geändert hat) weißt.
Denn für das Skript reicht ein "kein Problem" ja nicht aus, wenn es darum geht, den neuen Dateinamen einzustellen.

Ansonsten findest Du die genauen Informationen wie gewohnt auf man ftp,
und eine grundsätzliche Einführung zum Skripten in unserem Wiki.

Was das Timing angeht, wird man bei so schnellen Zyklen (unter 1 Minute) wahrscheinlich direkt eine Endlosschleife mit sleep nehmen,
und nicht - wie sonst üblich - einen cron - Job o.ä. .

LG,

track

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 12527

Ich würde das ganze wohl mit Ruby oder Python machen. Für beide gibt es FTP-Clients:

Da kann man dann auch die Namen und Zeitstempel besser verarbeiten, als beim Parsen vom Output von ftp.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Welche Sprache man für sowas nimmt, hängt wohl zuerst von den persönlichen Vorlieben und Vorkenntnissen ab ...

Beim Probieren fiel mir auf, dass (Shell-) ftp ja erstmal von interaktiven Eingaben ausgeht.
Allerdings gibt es hier ein Beispiel, wie man das trotzdem skripten kann.

Um die neueste Datei zu bekommen, reicht dabei ja schon der (ftp-) Befehl ls -t, wenn Du (z.B. mit head) die 1. Zeile wählst.

LG,

track

bura200

(Themenstarter)

Anmeldungsdatum:
14. April 2017

Beiträge: 21

Danke...Tolle Ansätze für FTP in scripten. Ein Problem sehe ich noch mit der neuesten Datei. Kann ich den ls Befehl mit get koppeln?? Ich will ja den Inhalt der letzten Datei haben/ kopieren.

Danke Daniel

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Das werden im Endeffekt zwei ftp- Aufrufe, schätze ich mal. (vielleicht ginge es auch eleganter, aber dazu kenne ich mich mit ftp zu wenig aus.)

Könnte z.B. so aussehen: (als Testbeispiel habe ich irgendeinen Anonymous-ftp-Server genommen)

track@track:~$ ftp -n ftp.cs.brown.edu <<FERTIG  |  head
user anonymous  
cd incoming
ls -t
bye
FERTIG

-rw-r--r--    1 4261       65534         1578496 Apr 14 09:26 Photo.scr
-rw-r--r--    1 4261       65534         3397734 Apr 13 03:57 5MB.zip.762
-rw-r--r--    1 4261       65534         3397734 Apr 13 03:57 3MB.zip.854
-rw-r--r--    1 4261       65534         3397734 Apr 13 03:57 4MB.zip.763
-rw-r--r--    1 4261       65534         3397734 Apr 13 03:56 5MB.zip.761
-rw-r--r--    1 4261       65534         3397734 Apr 13 03:56 4MB.zip.762
-rw-r--r--    1 4261       65534         3397734 Apr 13 03:56 3MB.zip.853
-rw-r--r--    1 4261       65534         3397734 Apr 13 03:44 5MB.zip.760
-rw-r--r--    1 4261       65534         3397734 Apr 13 03:44 3MB.zip.852
-rw-r--r--    1 4261       65534         3397734 Apr 13 03:44 4MB.zip.761
local: -: Broken pipe
track@track:~$ ftp -n ftp.cs.brown.edu <<FERTIG  |  sed -n  '1 s/.\{62\}//p'
user anonymous  
cd incoming
ls -t
bye
FERTIG

Photo.scr
track@track:~$ file=$( ftp -n ftp.cs.brown.edu <<FERTIG  |  sed -n  '1 s/.\{62\}//p'
user anonymous  
cd incoming
ls -t
bye
FERTIG
)
track@track:~$ echo "$file"
Photo.scr 

Hier habe ich sed benutzt, weil ich damit gleichzeitig die 1. Zeile abfiltern und die vorderen 62 Zeichen davon wegputzen kann.

Als Zweites käme jetzt das selbe nochmal, nur mit einem get $file statt ls -t drin. Und natürlich ohne Pipe und sed .
(der Dateiname $file wird dabei von der Shell eingesetzt). (auf diesen Schritt verzichte ich mal, bei einem fremden Server) 😉

LG,

track

Mokkujin

Anmeldungsdatum:
2. Mai 2008

Beiträge: Zähle...

ftp verzeichnis mounten und mit inotify überwachen, werde ich selbst mal probieren weiß nicht ob es funktioniert 😉

Was meint ihr dazu müsste doch funktionieren oder ? Über curlftpfs mounten und dann mit inotify überwachen. Vorteil wäre man hat die Anzeige immer in Echtzeit.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Mit ftp habe ich es noch nicht probiert, aber mit SMB wird das gemountete Verzeichnis auf jeden Fall erst neu geladen, wenn man den "aktualisieren" - Knopf drückt. Vorher definitiv nicht. (wäre auch komisch, denn das müsste sonst ja ständig Netzlast erzeugen !)

Da ist also nix mit inotify. (Mit meinem Test-ftp-Server von hier oben kannst Du es ja mal ausprobieren: dort wird laufend Zeug hochgeladen.)

(Edit: - ich sehe grade, auf meinem Link vom Karfreitag ist heute nix los. Dann also hier mal eine Alternative.)

LG,

track

Mokkujin

Anmeldungsdatum:
2. Mai 2008

Beiträge: 389

Ich hab das jetzt mal auf einem Debian versucht mit incron, da funktioniert das super bei dem lokalem Storage auf dem FTP hab ich das noch nicht getestet. Werde ich aber nachholen ☺

bura200

(Themenstarter)

Anmeldungsdatum:
14. April 2017

Beiträge: 21

Hi.. Funktioniert soweit. Würde das ganze jetzt gerne optimieren. Im Moment zeigt er mir alle neuen Alare und alten in einer Liste.

z.B.: * Neuer Alarm Neuer Alarm

Mit Stern ist ein neu auftretender Alarm gekennzeichnet, wenn er wieder weg geht kommt der selbe Text ohne Stern. Könnte man das sortieren, das nur ungelöste Alarme erscheinen?? Also neue Alarme mit Stern da sind und wenn weg sind gelöscht usw.??

Danke für einen Ansatz... Daniel

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 10978

Du kannst z.B. nur Zeilen anzeigen lassen, die mit einem Sternchen gefolgt von einem Leerzeichen beginnen - z.B. mit grep:

grep "^\* " datei_mit_alarmen.txt 
Antworten |