IP リストが与えられたら、「最も近い」または最低の待ち時間が一番上にあり、「最も遠い」または最長の待ち時間が一番下になるようにどのようにソートしますか?
答え1
以下は、bashで書かれたNIS関連のソリューションです。
yplist=( $( ypcat ypservers|xargs -n1 host|sed -n '/has.address/s/.*[[:space:]]//p'|sort -u ) )
nearest=( $( for pp in ${yplist[@]}; do ping -q -n -c 5 -i 0.3 $pp|awk -F/ '/^rtt/{printf "%d:",($5*1000)}'; echo $pp; done|sort -n -t: -k1|cut -d: -f2 ) )
printf "ypserver %s\n" ${nearest[@]} >/etc/yp.conf
これはストーリーが進むにつれて成長するパイプラインなので、次のようになります。
$yplist
ソースリストとして使用するホスト配列です。$nearest
順番に獲得$yplist
し、sping
- 要約行だけが一致するように出力範囲が
ping
狭くなりました。awk
- わずかなハッキング:ms単位の往復時間を
/
区切り記号として1000を掛けてμs単位の整数値を取得します。avg
- フォローアップ
echo $pp
は、問題のIPを行の末尾に貼り付けることです。 - ループ全体
for
はフィールド#1の数字でソートされます。応答時間の短い平均が上部に表示されます。 - 最初のフィールドは切り捨てられ、IPだけが残ります。
- 次に、このIPリストを配列
$nearest
に割り当てます。
以下は、待ち時間が最も短いIPの結果のリストです。
(最後の行はNIS設定用のprintf
新しいプレフィックスを作成し、各IPに「ypserver」プレフィックスを追加します。)/etc/yp.conf
潜在的に信頼できないホストを公開するために、バイアス要因(出力)に最小遅延を追加することを検討mdev
しましたping
。ただし、この統計は、各ホストが数時間または数日間実行されている場合にのみping
役立ちます。要因は何ですか? 10 ~ 100 程度が合うようですが、信頼性の低下に対する許容値に対応するように調整する必要があります。結果を約5%ほどクリーンアップするには多くの作業が必要なようです。