Forum: PC-Programmierung inetd + script


von Tobi (Gast)


Lesenswert?

Hallo Linuxer,

habe hier eine Telefonanlage, die per RS232 mit einem Linuxrechner 
verbunden ist, der alle von ihr empfangenen ASCII-Zeilen in eine Datei 
schreibt. Nun möchte ich den Inhalt dieser Datei über einen TCP-Port 
abrufbar machen. Die Verbindung soll nach Übertragung der Datei bestehen 
bleiben. Sobald neue Zeilen in die Datei geschrieben werden, sollen 
diese parallel dazu über die TCP-Verbindung geschickt werden. Dazu habe 
ich ein Script erstellt, das eigentlich nur aus

#!/bin/sh
tail -f /pfad/zur/datei

besteht. In /etc/services habe ich einen neuen Service-Namen zusammen 
mit einer Portnummer festgelegt. In /etc/inetd.conf habe ich den 
Service-Namen mit obigem Script verknüpft.

Im Prinzip funktioniert auch alles wunderbar. Das Problem ist nun, dass 
nach einem Trennen der Verbindung durch den Client das Script bzw. tail 
offenbar nicht beendet wird. Es schadet zwar nicht der Funktion, nur 
wird die Prozessliste mit der Zeit voller und voller. Hat jemand eine 
Idee, wie man eine Trennung der TCP-Verbindung feststellen und das 
Script möglichst elegant beenden kann? Oder gibt es generell eine 
bessere Lösung für mein Vorhaben? Vielen Dank!

Tobias

von Zwie B. (zwieblum)


Lesenswert?

lass das "-f" weg, dann gehts. Ansonsten gibt's laut Specs keine 
Möglichkeit zu prüfen, ob die Verbindung besteht.

von Tobi (Gast)


Lesenswert?

Dann geht's insofern, dass das Script korrekt beendet wird - die 
Verbindung sowie die Übertragung neu eintreffender Daten aber leider 
auch.

von Zwie B. (zwieblum)


Lesenswert?

Natürlich. Aber wie wär's mit diesem Workaround:

#!/bin/sh
killall tail
tail -f /pfad/zur/datei

dann hast du nur ein "tail", das nicht beendet wird.

von Tobi (Gast)


Lesenswert?

Evtl. hätte ich erwähnen sollen, dass auch mehrere Clients gleichzeitig 
verbunden sein können.

von A.H. (Gast)


Lesenswert?

Nicht im inetd getestet, aber vielleicht gehts so:

-----
#!/bin/bash
# Im Hintergrund das Tail
tail -f /tmp/watchme.log > /dev/tty &
# Im Vordergrund warten auf EOF
cat > /dev/null
# und dann killen.
kill %1
-----

von Tobi (Gast)


Lesenswert?

Die 1 sollte wohl ein ! sein, aber wie auch immer: Spitze! So 
funktioniert's... Vielen Dank euch beiden!

Tobias

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.