&-" 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
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
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">&8C'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.
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!