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% 정도 정리하려면 많은 작업이 필요한 것 같습니다.