Guten Morgen!
Ich habe ein Problem mit dem Ausführen eines Script welches eigentlich immer gelaufen ist und jetzt nach einem Systemwechsel nicht mehr will.
Per TCPDUMP greife ich die Ethernet-Schnittstelle an Port 9201 ab und lese damit Daten eines Datalogger aus, welcher mir in unterschiedlichen Abständen Datensätze senden.
Per Script analysiere ich diese und schreibe sie in eine Datei.
Die Daten kommen wie folgt daher:
E.....@...........X...#.....#STA:000001,821;L:146; TM:840405013001;D:2;T:01;C:52;A01:3.417;A02:6.500; A03:185.5;A04:0.700;A05:0.900;A06:355.0;A07:183.4; K01:10000000000;O01:0000;11;#
Script zum Zerlegen und Speichern:
#!/bin/bash
tcpdump -l -A -i eth0 '(port 9201)' -n -q -e | grep --line-buffered STA | awk -F 'STA:' '{print $NF}' | awk -F "[;]" {'print substr($7,5)";"substr($8,5)";"substr($9,5)";"subst r($10,5)";"substr($11,5)";"substr($12,5)";"substr( $13,5)'} | awk '{ print strftime("%d.%m.%Y"";""%H:%M:%S"";"), $0; fflush(); }'>> /volume1/smartlogger/log.txt
Der Output ist beispielsweise so: 23.11.2018;22:55:17; 3.417;2.375;356.3;0.300;0.500;354.0;355.6
Zum Testen habe ich folgendes probiert:
Ich sende per Echo eine Nachricht und lasse sie durch awk aufbereiten und speichern. Das funktioniert in der Kommandozeile
echo "E.....@...........X...#.....#STA:000001,821;L:146 ;TM:840405013001;D:2;T:01;C:52;A01:3.417;A02:6.500 ;A03:185.5;A04:0.700;A05:0.900;A06:355.0;A07:183.4 ;K01:10000000000;O01:0000;11;#"
grep --line-buffered STA | awk -F 'STA:' '{print $NF}' | awk -F "[;]" {'print substr($7,5)";"substr($8,5)";"substr($9,5)";"subst r($10,5)";"substr($11,5)";"substr($12,5)";"substr( $13,5)'} | awk '{ print strftime("%d.%m.%Y"";""%H:%M:%S"";"), $0; fflush(); }'>> /volume1/smartlogger/log.txt
Führe ich aber das Script aus (also nicht in der Kommandozeile), so ist die Datei immer leer.
Ich habe nun das Script so abgeändert, dass nur mehr folgendes beinhaltet war. Das funktioniert wieder:
#!/bin/bash
tcpdump -l -A -i eth0 '(port 9201)' -n -q -e | grep --line-buffered STA >> /volume1/smartlogger/log.txt
Daher liegt das Problem beim awk, was nicht richtig ausgeführt wird, wenn es nicht direkt in der Komandozeile ausgeführt wird.
Wo liegt da das Problem?