www.mikrocontroller.net

Forum: PC-Programmierung inetd + script


Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Zwie Blum (zwieblum)
Datum:

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

Autor: Tobi (Gast)
Datum:

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

Autor: Zwie Blum (zwieblum)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobi (Gast)
Datum:

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

Autor: A.H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
-----

Autor: Tobi (Gast)
Datum:

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

Tobias

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.