온라인/오프라인 상태를 로그 파일에 기록

온라인/오프라인 상태를 로그 파일에 기록

Linux 호스트의 온라인/오프라인 상태를 로컬 로그 파일에 기록하는 방법을 찾고 있습니다.

나는 ping이것을 사용하려고 시도했지만 시간 초과/삭제된 패키지를 기록하지 않았으며 성공적인 전송만 표시합니다. ping -D 8.8.8.8 | awk 'NR>1 { printf strftime("%c", $0) "%s",$2; }' RS=[ FS=]

Mi 14 Okt 2015 13:03:06 CEST 64 bytes from 8.8.8.8: icmp_req=155 ttl=55 time=18.4 ms
Mi 14 Okt 2015 13:03:07 CEST 64 bytes from 8.8.8.8: icmp_req=156 ttl=55 time=18.6 ms
Mi 14 Okt 2015 13:03:08 CEST 64 bytes from 8.8.8.8: icmp_req=157 ttl=55 time=18.4 ms
Mi 14 Okt 2015 13:05:19 CEST 64 bytes from 8.8.8.8: icmp_req=244 ttl=55 time=18.4 ms
Mi 14 Okt 2015 13:05:20 CEST 64 bytes from 8.8.8.8: icmp_req=245 ttl=55 time=18.4 ms

그래서 오프라인 상태를 감지하려면 요청 번호를 주의 깊게 살펴봐야 합니다.

이를 수행하는 더 좋은 방법을 알고 있거나 이를 위한 도구 이름을 지정할 수 있는 사람이 있습니까?

미리 감사드립니다.

답변1

Munin, Nagios 등과 같이 이를 수행할 수 있는 도구가 이미 많이 있습니다. 휠을 다시 만드는 이유는 모르겠지만 쉘 솔루션을 원한다면 다음과 같습니다.

#!/bin/bash

logfile="/var/log/up-or-down.log";
ip_address_for_testing="192.168.1.10";

while [[ true ]]; do
    ping -c 5 $ip_address_for_testing;
    if [[ $? -eq 0 ]]; then
        echo "IP status for ${ip_address_for_testing}: UP" >> $logfile;
    else
        echo "IP status for ${ip_address_for_testing}: DOWN" >> $logfile;
    fi;
    sleep 5;
done;

위의 예는 $ip_address_for_testing에 정의된 호스트에 5개의 ECHO REQUESTS를 보내고 모두 잘 진행되면 $logfile에 작동 또는 작동 중지 여부를 기록합니다. 파일에 저장하고 chmod로 실행 권한을 부여한 다음 /etc/rc.local 또는 /etc/rcS.d를 통해 호출합니다(두 번째 옵션을 선택하는 경우 /etc/init에 저장해야 합니다). .d를 선택하고 이에 대한 심볼릭 링크를 만듭니다). 부팅 시 시작하려는 경우.

시아!

관련 정보