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

ホームページ  >  記事  >  運用・保守  >  シェルはネットワーククライアントメソッドを実装します

シェルはネットワーククライアントメソッドを実装します

PHP中文网
PHP中文网オリジナル
2017-06-20 11:58:161860ブラウズ

オンラインのアクセスログを受け取るには別のプログラムに送信する必要がある
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 パラメータを追加する必要があります。行バッファリングを使用します
そうしないと、サーバーが受信したデータに改行が含まれます。

この種のエージェントの非常に単純な機能はパフォーマンスが優れていますが、欠点もあります

エージェントがサーバーとのチャネルを確立した後、サーバーがハングアップすると、チャネルが切断されるとエージェントもハングアップし、プログラムはexit (TCP クライアントにこの問題があり、upd No)

または、ネットワークが悪いとエージェントが終了する可能性もあります (今回はこの問題は発生しませんでした。すべて光ファイバー相互接続でした)
したがって、対応する監視プログラムを使用してエージェントを検出し、異常が発生した場合に自動的に再起動するか、ネットワーク品質が良好な場合は udp の使用を検討してください。

以上がシェルはネットワーククライアントメソッドを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。