나는 많은 수의 컴퓨터를 가지고 있고 매 시간마다 가용성을 확인해야 합니다. 나는 1000대에 가까운 컴퓨터를 가지고 있으며 4-5개의 이름 시리즈와 각 노드의 번호로 나뉩니다. 예를 들어 ab1000에서 ab1200, bs3000에서 bs3892, zx7800에서 zx8900 등입니다. 현재 저는 모니터링을 위해 이 노드에 소프트웨어를 보관할 수 없기 때문에 간단한 ping 스크립트를 사용하고 있습니다(이 작업을 수행할 권한이 없습니다). 그래서 내 코드에서 나는 모든 컴퓨터 이름을 하나씩 업데이트하는 파일을 호출하고 있습니다. (컴퓨터 이름이 자주 나타나기 때문에 매일 이 작업을 수행해야 합니다.) 정규식을 사용할 수 있는지 궁금합니다. 내 인생을 훨씬 더 쉽게 만들어주세요. 예: ab1*, zx[7-8]* 등 입력 파일에서 동일한 내용을 사용해 보았지만 별로 도움이 되지 않았습니다. 또 다른 문제는 때때로 한두 대의 컴퓨터가 영구적으로 다운되어 매번 그 수를 셀 필요가 없다는 것입니다. 그래서 나는 그것을 내 경고 목록에 보관해야 합니다.
또한 3/300 sx가 다운되고 컴퓨터 이름이 sz7701,7702,7703이기 때문에 경고가 목록을 제공하는 것처럼 경고를 더욱 강력하게 만들기 위해 수행할 수 있는 다른 작업이 있는지 알려주십시오.
cat /tmp/node.txt
zx7800
zx7801
zx7802
.....
....
zx8900
bs3000
bs3001
cat nodecheck.sh
for node in `cat /tmp/node.txt`
do
count=0
count=$(ping -c 3 $node | grep "100%packet loss"|wc -l)
if [ $count -ne 0 ]
then
echo "$node" >> /tmp/nodedown.txt
fi
done
답변1
모니터링할 이름 목록이 필요합니다. 이 목록을 수동으로 유지 관리하거나 다른 사람이 실행해야 하는 컴퓨터 목록을 유지 관리하는 위치에서 가져올 수 있습니다.
일을 단순화할 수 있습니다. 이 ping
명령은 이미 종료 상태를 반환하므로 이를 사용할 수 있습니다. 또한 모든 에코에 대해 리디렉션할 필요가 없으며 루프당 한 번이면 충분합니다. 이것의 또 다른 이점은 파일이 초기화되고 마지막 실행의 행을 포함하지 않는다는 것입니다.
for node in $(cat /tmp/node.txt); do
if ! ping -c 3 $node &> /dev/null; then
echo "$node"
fi
done > /tmp/nodedown.txt
통계를 원하면 통계를 계산하거나 이를 사용하여 wc
두 파일의 행 수를 계산할 수 있습니다.
echo "$(wc -l < /tmp/nodedown.txt) / $(wc -l < /tmp/node.txt)"
답변2
대안:
- 평평한ping과 유사하지만 여러 호스트에 ping을 보내기 위해 특별히 설계되었습니다.
- 어떻게 되어가나요?기계의 작동 또는 종료를 모니터링하도록 설계된 유틸리티입니다.