&-" 0 file='/data/nginx/llogs/access.log'"/> &-" 0 file='/data/nginx/llogs/access.log'">
オンラインのアクセスログを受け取るには別のプログラムに送信する必要がある
Pythonで実装することを考え始めましたが、Pythonでもtail -Fを実装する方法がありますが、面倒で効率も悪くなります
シェルはネットワーク クライアントを実装できることを偶然発見しました
最初のコード:
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
実際の処理ロジック コードはわずか 2 行です。コードの説明は次のとおりです。
最初の行は主にプログラムの終了ステータスを取得し、終了後に接続を閉じます
2行目はログファイルを定義します
3行目は特別なファイル/dev/(udp|tcp)/を確立します。 ip/port
このファイルをファイル記述子にバインドして、対応するネットワーク接続の場合、ファイル記述子は 3 より大きくなります。 4 行目は、確立されたチャネルにデータを送信します。 grep にはバッファがあるため、デフォルトでは出力されません。バッファがいっぱいになるまでデータを保存するため、-buffered パラメータを追加する必要があります。行バッファリングを使用します
そうしないと、サーバーが受信したデータに改行が含まれます。
この種のエージェントの非常に単純な機能はパフォーマンスが優れていますが、欠点もあります
または、ネットワークが悪いとエージェントが終了する可能性もあります (今回はこの問題は発生しませんでした。すべて光ファイバー相互接続でした)
したがって、対応する監視プログラムを使用してエージェントを検出し、異常が発生した場合に自動的に再起動するか、ネットワーク品質が良好な場合は udp の使用を検討してください。
以上がシェルはネットワーククライアントメソッドを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。