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

Maison  >  Article  >  Opération et maintenance  >  Shell implémente la méthode client réseau

Shell implémente la méthode client réseau

PHP中文网
PHP中文网original
2017-06-20 11:58:161819parcourir

Besoin d'envoyer les journaux d'accès en ligne à un autre programme pour réception
J'ai commencé à penser à utiliser python pour l'implémenter Bien que python ait également une méthode similaire à tail -F, elle est trop lourde et l'efficacité est également réduite<.>Je l'ai découvert par hasard. Le shell peut implémenter le client réseau, et il peut être implémenté avec seulement quelques lignes de code

D'abord le 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
C'est super simple. Le code logique de traitement réel ne comporte que 2 lignes. Voici la description du code :

La première ligne sert principalement à capturer l'état de sortie du programme et à fermer la connexion après la sortie
La deuxième ligne définit le fichier journal.
La troisième ligne établit une connexion réseau. Linux a un fichier spécial /dev/(udp|tcp )/ip/port
Liez ce fichier à un descripteur de fichier pour établir une connexion réseau correspondante. supérieur à 3, alors
La quatrième ligne envoie des données au canal établi
Parce que grep aura un tampon, par défaut, il n'affichera les données qu'une fois le tampon plein, vous devez donc ajouter le --line-buffered paramètre et utilisez la mise en mémoire tampon de ligne
Sinon, les données reçues par le serveur auront des sauts de ligne.

La fonction super simple de cet agent a de bonnes performances mais il y a un inconvénient

Une fois que l'agent et le serveur ont établi un canal, si le serveur raccroche, l'agent raccrochera également lorsque le canal est déconnecté, et le programme se fermera (le client TCP a ce problème, pas upd)
Ou le réseau n'est pas bon, ce qui peut également provoquer la fermeture de l'agent (je n'ai pas eu ce problème cette fois, c'était tout Internet par fibre optique )
Par conséquent, un programme de surveillance correspondant est nécessaire pour détecter l'agent, et automatiquement en cas d'anomalie Redémarrez, ou si la qualité du réseau est bonne, envisagez d'utiliser udp

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn