Tcpdump / awk

Status
Für weitere Antworten geschlossen.

trmax

Benutzer
Mitglied seit
23. Jul 2015
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
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:

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

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?
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.285
Punkte für Reaktionen
2.855
Punkte
423
Daher liegt das Problem beim awk, was nicht richtig ausgeführt wird, wenn es nicht direkt in der Komandozeile ausgeführt wird.
Sowas liegt oft am Pfad, evtl. wird awk (ohne Pfad) einfach nicht gefunden. Nimm mal den PATH=..., export PATH-Teil aus der /etc/profile mit ins Script auf.
 

trmax

Benutzer
Mitglied seit
23. Jul 2015
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
hallo Benares!

Ich mach grad meine ersten Versuche mit Scripting. kannst du mir konkret auf die Sprünge helfen?
 

trmax

Benutzer
Mitglied seit
23. Jul 2015
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin

echo "HALLO"

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)";"substr($10,5)";"substr($11,5)";"substr($12,5)";"substr($13,5)'} |awk '{ print strftime("%d.%m.%Y"";""%H:%M:%S"";"), $0; fflush(); }' >> testlog_mit_path.txt


wieder kein erfolg
 

trmax

Benutzer
Mitglied seit
23. Jul 2015
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Update: ERFOLG

folgendes hab ich getrennt in 2 einzelne Files und als zwischenlösung eine TMP-Datei die sich immer entleert:

#!/bin/bash
echo "HALLO"
tcpdump -l -A -i eth0 '(port 9201)' -n -q -e |grep --line-buffered STA >> /volume1/smartlogger/tmp_datastream


und

#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin




echo "HALLO"
sed -r 's#^.*(STA)#\1#' /volume1/smartlogger/tmp_datastream | awk -F "[;]" {'print substr($7,5)";"substr($8,5)";"substr($9,5)";"substr($10,5)";"substr($11,5)";"substr($12,5)";"substr($13,5)'} | awk '{ print strftime("%d.%m.%Y"";""%H:%M:%S"";"), $0; fflush(); }' > /volume1/smartlogger/tmp_mysql

IFS=";"
while read column1 column2 column3 column4 column5 column6 column7 column8 column9

do
echo "INSERT INTO s_9201 (column1,column2,column3,column4,column5,column6,column7,column8,column9) VALUES ('$column1', '$column2', '$column3', '$column4', '$column5', '$column6', '$column7', '$column8', '$column9');"

done < /volume1/smartlogger/tmp_mysql | /usr/local/mariadb10/bin/mysql -u ***-p****-D smart_data_logger > /volume1/smartlogger/tmp_datastream




ein Problem gibts noch: wie kann ich ohne sudo auf tcptump zugreifen?
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat