답변 감사합니다.
죄송하지만 리플 한번 더 달겠습니다.^^
앞전 스크립트에서 연결불가일때 메일발송하도록
했는데, 유독 00:00 분에 실패라고 되더군요.
아마 ping 이 한번정도 끊어지거나 하는모양인데,
반드시 00:00 분 인것이 좀 이해가 안가는데요.
지금 크론으로 15분마다 체크하도록 되어 있거든요.
하루종일 괜찮다가,
23:15 -> 23:30 -> 23:45 -> 00:00 요기서 그러는거 보면 시스템
자체에서 도는 크론영향인거 같기도 하고...
체크대상 리눅스가 그런게 아니고 ping 을 보내는 리눅스
말입니다.
그럴 가능성도 있겠죠? ping 을 보내는 PC가 팬3, 512램인데 가정용
회선이라 그런가...
아래는 제가 끙끙대면서 좀 수정해 봤습니다.
#!/bin/sh
#
# -- ping test and logging
export LOGDATE="`date '+%Y%m%d'`"
LOGDIR="check_logs"
if [ ! -d ${LOGDIR} ] ; then
mkdir ${LOGDIR}
fi
_checkping(){
HOST=$1
COUNT=$2
EXTIME=`date '+%Y/%m/%d %H:%M:%S'`
LOGFILE="${LOGDIR}/${LOGDATE}_${HOST}_checkping.log"
if [ ! -e ${LOGFILE} ] ; then
touch ${LOGFILE}
fi
RESULT=`ping -s 1 -c ${COUNT} -w ${COUNT} ${HOST}`
echo -e "[${EXTIME}]\n${RESULT}\n\n" >> ${LOGFILE}
}
=> ping 과정을 그대로 저장하기 위해 grep 을 뺐는데요.
RESULT=`ping -s 1 -c ${COUNT} -w ${COUNT} ${HOST}`
RETRY=3 ## 실패시 재시도 회수
N=1 ## start idx
TARGET=192.168.1.1 ## host
while [ ${N} -le ${RETRY} ] ;
do
RES=`_checkping ${TARGET} 4 | grep error`
=> 위에서 로그에 저장하느라 grep 을 뺐더니만 여기에서 어떻게
비교해야 할지 모르겠습니다.ㅎㅎ
if [ -z "${RES}" ] ; then
echo "${N} : 정상"; break;
else
echo "${N} : 에러"
#./sendmail.sh
fi
N=`expr ${N} + 1`
done
exit 0
미흡한 부분좀 잡아 주심 고맙겠습니다.
에휴... 업무하랴 이거하랴.. 상사들PC 봐주러 다니랴...
모른다고 하면 자기한테 도전하냐고...컥^^
짜증연속이네요.ㅎㅎ
[산이]님이 남기신 글:
>
>[김우연]님이 남기신 글:
>
>>수고하십니다.
>>책 잘 보고 있습니다. (좀 보다가 옆구리(제본)가
터졌습니다.)
>>사무실에서 원격에 있는 리눅스 PC의 접속상태를 체크하고자
이곳의 게시판 검색을 통해 아래와 같이 스크립트를 크론으로
넣었습니다.
>>
>>#!/bin/sh
>>
>>ping_test() {
>> result=`ping -s 1 -c 4 -w 4 xxx.xxx.xxx.xxx 2>/dev/null | grep "4
packets transmitted, 4 received"`
>> if [ X"$result" = "X" ] ; then
>> echo "연결불가"
## 메일발송
>> else
>> echo "연결정상"
>> fi
>>}
>>
>>ping_test
>>
>>exit 0
>>
>>
>>근데 어제 밤에 보니 4번 요청에 4번 응답이 없었던
모양이에요.
>>게시판 자료상으로는 -c 1 -w 1 로 되어 있어서 혹시나 해서
4번씩 하도록 했는데 4번이 모두 응답되지 않는 경우가 있는거
같아요.
>>리눅스는 정상인데 회선지연등의 이유가 의심은
되는데요.
>>
>>혹시, 4번을 날려서 2번이상만 응답되면 정상.. 뭐 이런식으로
할 수는 없을까요?
>>아니면, ping 시도후 grep "4 packets transmitted, 4 received"
이와 같이 안나오면 3회까지 재시도..
>>크론으로 20분간격으로 하고 있는데, 시도결과를 로그파일에
기록을 했으면 좋겠는데...
>>이런식으로 좀 유연하게 해보면 좋겠는데, 쉘스크립트가
깡맹이라.. 문의좀 드립니다.
>>
>>원격에 있는 리눅스는 사실 다른 사무실에 있는 건데
KT기업전용선 입니다.
>>사무실 인터넷 쓰고 이거저거 하는용도 입니다.
>
>========================================
>
>앗 오랫만에 질문이 올라왔네요. ㅎㅎ
>
>------------------------------------
>#!/bin/sh
>#
># -- ping test and logging
>
>_ping()
>{
> HOST=$1
> COUNT=$2
> ping -s 1 -c ${COUNT} -w ${COUNT} ${HOST} 2>/dev/null | grep error
>}
>
>RETRY=3 ## 실패시 재시도 회수
>N=1 ## start idx
>TARGET=xxx.xxx.xxx.xxx ## host
>
>DATE=`date '+%Y-%m-%d %H:%S'`
>
>while [ ${N} -le ${RETRY} ] ;
>do
> R=`_ping ${TARGET} 4`
> [ -z "${R}" ] && { R=OK; break; }
> N=`expr ${N} + 1`
>done
>
>echo "${DATE} => ${R}" >> /var/log/ping-${TARGET}.log
>
>exit 0
>----------------------------------------------
========================================
|