답변:
단일 패킷을 전송하고 응답을 기다리는 것이 가장 빠른 방법 중 하나가 될 것입니다. 핑 (Ping)을 사용하는 것이 좋습니다. 실제로 유스 케이스에 따라 시스템이 실제로 유용한 것을 수행하는지 여부를 알려주지 않고 커널의 네트워크 서브 시스템이 살아 있고 구성되어 있기 때문에 너무 빠르다고 주장 합니다.
그러나 충분하다고 가정하면 개선 할 수 있습니다. 먼저 -W1
핑 시간 초과를 1 초로 줄이는 데 사용할 수 있습니다 . 둘째, 스크립트가 다른 호스트를 백그라운드 스레드에서 비동기 적으로 핑하도록하고 대기하지 않고 필요에 따라 결과를 확인할 수 있습니다.
또는 접근 방식을 다시 생각하고 원격 시스템이 작동 중일 때 어떻게 든 체크인하도록 할 수 있으며 시스템이 체크인되지 않은 경우 작동 중지 된 것으로 가정 할 수 있습니다.
이것이 fping을 위해 설계된 것입니다. http://fping.sourceforge.net/
리턴 코드에 의존하는 대신 나중에 출력을 구문 분석해야하지만 일반 Ping을 수행하는 것보다 훨씬 빠릅니다.
브로드 캐스트 주소를 핑하면 모든 컴퓨터가 핑백해야합니다. 그런 다음이 목록을 SQLite에있는 것과 비교하여 모든 컴퓨터가 작동하는지 확인할 수 있습니다.
다른 하나는 핑이 컴퓨터가 네트워크에서 깨어날 수있는 가장 빠른 방법 일 것입니다. 다른 답변에서 언급했듯이 이것은 실제로 유용한 데이터를 제공하지 않습니다. 스크립트를 설치하는 기능이 있으면 중앙 서버를 핑 (ping)하기 위해 cronjob을 추가하거나 작업을 실행하거나 요청을 기록 할 중앙 서버로 프로세스 목록을 출력 할 수 있습니다. 그런 다음 간단히 확인하면 매번 수동으로 확인할 필요가없는 문제가 있는지 알려줍니다.
Ganglia 는 멀티 캐스트 트래픽을 사용하여 클러스터의 많은 호스트를 모니터링합니다. 아마도 비슷한 것을 사용할 수 있습니까? 이는 네트워킹 하드웨어가 모든 호스트와 모니터링 시스템 간의 멀티 캐스트 트래픽을 허용한다고 가정합니다.
나는 같은 문제가 있었고 다음과 같은 (빠른 & 더러운) 스크립트를 생각해 냈습니다. 이것은 본질적으로 모든 핑을 개별 작업으로 병렬로 발행하며 3 초 안에 전체 / 24 서브넷을 스캔합니다. 어떤 이유로 든 여기에서 ping 결과 코드를 사용할 수 없다는 것을 알지 못했지만 grep -v가 작업을 수행했습니다.
#!/bin/bash
case $# in
1)
case $1 in
[1-9]*)
echo
echo Systems active in subnet: $1
for (( K = 1 ; K < 255 ; K=$K+1 )); do
# grep -v delivers 0 on no matches
echo -ne "testing:" $1$K "... \r"
(if ping -c 1 -w 1 -n $1$K 2>&1 | grep -q '64 bytes' ; then
echo $1$K alive " "
fi) &
done
sleep 3
echo " "
exit 0
;;
esac;;
esac
fping -r0 ...
가장 빠른 응답을 제공하는 것으로 나타났습니다 .
-r
(재시도) 옵션은 유사한보다 더 빠른 것 같다 -c
(카운트). 사용 -r0
한 핑의 결과는 전송되는 출력은 많은 다른 옵션에 비해 축약된다.
내 시스템에서 ...
fping -r0 PRINTER LX00 LX01 LX02 LX03 HA01 2>&1
결과는 ...
LX00 is alive
LX02 is alive
HA01 is alive
ICMP Host Unreachable from 192.168.1.5 for ICMP Echo sent to LX01
PRINTER is unreachable
LX01 is unreachable
LX03 is unreachable
ICMP
메시지를 없애기 위해 약간의 마사지를 하면 나에게 ...
fping -r0 PRINTER LX00 LX01 LX02 LX03 HA01 2>&1 | grep ' is ' | sort
HA01 is alive
LX00 is alive
LX01 is unreachable
LX02 is alive
LX03 is unreachable
PRINTER is unreachable
속도에 관해서는 fping
4GB RAM이 장착 된이 오래된 1.8GHz Intel Dual-Core에서 ...
time fping -r0 PRINTER LX00 LX01 LX02 LX03 HA01 2>&1
LX00 is alive
LX02 is alive
HA01 is alive
PRINTER is unreachable
LX01 is unreachable
LX03 is unreachable
real 0m0.554s
user 0m0.000s
sys 0m0.000s
그리고 그 grep
와는 sort
시간 만에 0.001-0.004s를 추가하는 것 ...
time fping -r0 PRINTER LX00 LX01 LX02 LX03 HA01 2>&1 | grep ' is ' | sort
HA01 is alive
LX00 is alive
LX01 is unreachable
LX02 is alive
LX03 is unreachable
PRINTER is unreachable
real 0m0.558s
user 0m0.000s
sys 0m0.000s
노트
ICMP
메시지가 모든 실행에 발생하지 않습니다.2>&1
방지하려면이 필요 ICMP
로 메시지
가 전송 될 때의 출력에 나타나지 stderr
않고 stdout
.