전체 결과 페이지 대신 핑의 밀리초만 표시할 수 있습니까?
내 서버가 온라인인지 확인하고 싶어서 "OK xyz ms" 또는 "FAIL"을 반환하고 싶습니다. 나는 현재 이 일을 하고 있습니다:
#!/bin/sh
ergebnis=$(ping -qc1 google.com)
ok=$?
avg=$(echo -e "$ergebnis" | tail -n1 | awk '{print $4}' | cut -f 2 -d "/")
if [ $ok -eq 0 ]
then
echo "OK $avg ms"
else
echo "FAIL"
fi
그러나 이것은 꽤 많은 파이프 작업을 사용하고 서버를 모니터링하기 위해 이 명령을 자주 실행하기 때문에 "더 스마트한" 방법이 있는지 궁금합니다. 또한 ping 명령이 실패하면 파이프라인이 제대로 작동하지 않을 수도 있다는 우려도 있습니다.
답변1
다른awk
다양성:
ping -qc1 google.com 2>&1 | awk -F'/' 'END{ print (/^rtt/? "OK "$5" ms":"FAIL") }'
-F'/'
- 슬래시를/
필드 구분 기호로 처리
출력 예:
OK 47.090 ms
답변2
그 자체로는 할 수 있는 일이 많지 않지만 ping
AWK에서 모든 처리를 수행하여 파이프, 프로세스 등의 수를 줄일 수 있습니다.
ping -qc1 google.com 2>&1 | awk -F/ '/^rtt/ { printf "OK %.2f ms\n", $5; ok = 1 } END { if (!ok) print "FAIL" }'
답변3
정확한 오류 메시지에 별로 관심이 없다면 어떻습니까?
ping google.com | grep -Po "time.*"
답변4
네가 원한다면상태(아니다밀리초등) 이제 가셔도 좋습니다 if
. 이것은 내 사용 사례에 적합합니다.
if ping -q -c 1 192.168.8.8 2>&1 > /dev/null ; then
echo "Ok"
else
echo "Fail"
fi