Ping 스크립트 디버깅

Ping 스크립트 디버깅

나는 물었다전에 ping 스크립트에 대한 도움을 찾고 있습니다.ping이 실패하면 일부 호스트에 ping을 수행하고 나에게 이메일을 보내야 합니다. 이것은 훌륭하게 작동합니다.

이제 스크립트가 성공할 경우에만 이메일을 보내도록 스크립트(아래 참조)를 수정하고 싶습니다. 그래서 기본적으로 나는 작동하지 않는 일부 호스트에 ping을 보내는 스크립트를 원하며, 해당 호스트 중 하나라도 ping을 반환하면 스크립트가 나에게 이메일을 보내도록 하고 싶습니다. 이것은 내가 현재 가지고 있는 스크립트입니다:

#!/bin/bash

ping_targets="server1 server2 server3 server4 server5"
failed_hosts=""

for i in $ping_targets
do
   ping -c 1 $i > /dev/null
   if [ $? -ne 0 ]; then
      if [ "$failed_hosts" == "" ]; then
         failed_hosts="$i"
      else
         failed_hosts="$failed_hosts, $i"
      fi
   fi
done

if [ "$failed_hosts" != "" ]; then
   echo $failed_hosts| mailx -s "Failed ping targets" email@domain
fi

답변1

#!/bin/bash

ping_targets="server1 server2 server3 server4 server5"

for i in $ping_targets
do
   ping -c 1 $i > /dev/null
   if [ $? -eq 0 ]; then
         echo "$i ping success!" > test_file
   fi
   if [ -s test_file ];then        
         mailx -s "Successful ping targets" -a test_file email@domain
   fi

첨부 파일을 추가하지 않으려면 mailx해당 줄을 다음으로 바꾸십시오.

mailx -s "Successful ping targets" email@domain < test_file

답변2

ping_targets="server1 server2 server3 server4 server5"
up_hosts=""

for i in $ping_targets
do
   ping -c 1 $i > /dev/null
   if [ $? -eq 0 ]; then
      if [ "$up_hosts" == "" ]; then
         up_hosts="$i"
      else
         up_hosts="$up_hosts, $i"
      fi
   fi
done

if [ "$up_hosts" != "" ]; then
   echo $up_hosts| mailx -s "ping targets that are now available" email@domain
fi

답변3

fping을 사용하여 여러 서버의 핑을 확인하세요.

fping server{1,2,3,4,5} |& grep -v 'is alive' | mailx -E -s "Failed ping targets" email@domain

관련 정보