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:
Script zum Zerlegen und Speichern:
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
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:
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?
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:
PHP:
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;#
PHP:
#!/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
PHP:
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:
PHP:
#!/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?