&-" 0 file='/data/nginx/llogs/access.log'"/> &-" 0 file='/data/nginx/llogs/access.log'">

Heim >Betrieb und Instandhaltung >Betrieb und Wartung von Linux >Shell implementiert die Netzwerk-Client-Methode

Shell implementiert die Netzwerk-Client-Methode

PHP中文网
PHP中文网Original
2017-06-20 11:58:161890Durchsuche

Online-Zugriffsprotokolle müssen zum Empfang an ein anderes Programm gesendet werden
Ich habe darüber nachgedacht, es mit Python zu implementieren. Obwohl Python auch eine ähnliche Methode wie tail -F hat, ist diese zu umständlich und die Effizienz ist ebenfalls verringert
Ich habe es zufällig entdeckt. Die Shell kann den Netzwerk-Client implementieren, und es kann mit nur wenigen Codezeilen implementiert werden

Zuerst der Code:

trap "exec 8<&-;exec 8>&-" 0
file='/data/nginx/llogs/access.log'
exec 8<>/dev/tcp/10.3.0.200/9001
tail -F "$file" | grep --line-buffered "sid">&8

Es ist super Einfach. Der eigentliche Verarbeitungslogikcode besteht nur aus 2 Zeilen:
Die erste Zeile dient hauptsächlich dazu, den Programm-Exit-Status zu erfassen und die Verbindung nach dem Beenden zu schließen.
Die zweite Zeile definiert die Protokolldatei
Die dritte Zeile stellt eine Netzwerkverbindung her. Linux verfügt über eine spezielle Datei /dev/(udp|tcp)/ip/port
Binden Sie diese Datei an einen Dateideskriptor, um eine entsprechende Netzwerkverbindung herzustellen größer als 3, dann
Die vierte Zeile sendet Daten an den eingerichteten Kanal
Da grep einen Puffer hat, werden die Daten standardmäßig erst ausgegeben, wenn der Puffer voll ist, daher müssen Sie --line-buffered hinzufügen Parameter und Zeilenpufferung verwenden
Andernfalls weisen die vom Server empfangenen Daten Zeilenumbrüche auf.

Die supereinfache Funktion dieses Agenten bietet eine gute Leistung, es gibt jedoch einen Nachteil
Nachdem der Agent und der Server einen Kanal eingerichtet haben und der Server auflegt, legt der Agent auch auf, wenn die Verbindung zum Kanal getrennt wird. und das Programm wird beendet (TCP-Client hat dieses Problem, UPD nicht)
Oder das Netzwerk ist nicht gut, was auch dazu führen kann, dass der Agent beendet wird (dieses Mal hatte ich dieses Problem nicht, es war alles Glasfaser Internet)
Daher ist ein entsprechendes Überwachungsprogramm erforderlich, um den Agenten zu erkennen und automatisch neu zu starten, wenn eine Anomalie vorliegt. Wenn die Netzwerkqualität gut ist, sollten Sie die Verwendung von udp in Betracht ziehen

Das obige ist der detaillierte Inhalt vonShell implementiert die Netzwerk-Client-Methode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn