带时间戳的主机监控脚本

带时间戳的主机监控脚本

我刚刚制作了这个用于主机监控的脚本。

目标是 ping 主机并将输出记录到文件中,同时还将输出显示到终端。如果主机没有响应,它将记录时间以及相应的错误消息。目标是记录上/下时间的时间戳。

#!/bin/bash

DATE=$(date +"%d.%m.%Y %T")
SHORT_DATE=$(date +"%d.%m.%Y")

echo
echo "Pinging host " $@
echo

HOST=$@


ping $HOST | while read PONG
do
        grep ttl <<< "$PONG"

        if [ $? -eq 0 ]; then

                echo "`date`: $PONG"
                echo "`date`: $PONG" &>> ping_check_$SHORT_DATE.log

        else

                echo "`date`: ping failed, $HOST host is DOWN!" &>> ping_check_$SHORT_DATE.log
                echo "$PONG" &>> ping_check_$SHORT_DATE.log
        fi
done

现在的问题是,当 ping 成功时,脚本的输出如下所示(我得到两行输出,并且不需要第一行):

[spirit@vas scripts]$ ./ping_check3.sh 10.10.0.254

Pinging host  10.10.0.254

64 bytes from 10.10.0.254: icmp_seq=1 ttl=255 time=1.18 ms
Wed Jun  3 10:35:52 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=1 ttl=255 time=1.18 ms
64 bytes from 10.10.0.254: icmp_seq=2 ttl=255 time=1.28 ms
Wed Jun  3 10:35:53 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=2 ttl=255 time=1.28 ms
64 bytes from 10.10.0.254: icmp_seq=3 ttl=255 time=1.34 ms

以上输出来自终端。我只需要带有时间戳的结果,而不需要来自其ping $HOST本身的第一行?:

Wed Jun  3 10:35:52 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=1 ttl=255 time=1.18 ms

如何修复脚本,以便在输出中仅显示带有时间戳的行?


编辑:

只是为了澄清:

日志文件的输出如下所示:

Wed Jun  3 10:35:52 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=1 ttl=255 time=1.18 ms
Wed Jun  3 10:35:53 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=2 ttl=255 time=1.28 ms
Wed Jun  3 10:35:54 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=3 ttl=255 time=1.34 ms
Wed Jun  3 10:35:55 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=4 ttl=255 time=1.58 ms

答案1

只需编辑:

grep ttl <<< "$PONG"

到:

grep -q ttl <<< "$PONG"

您得到的输出来自grep.有了-q旗帜grep就安静了。

相关内容