Ping 失败监控

Ping 失败监控

网络经常出现故障,我想监控输出。我尝试临时使用以下命令:

ping www.google.fr | while read pong; do echo "$(date): $pong"; done 1>/dev/null && 2> ~/ping_err.log

但 STDERR 仍然重定向到 STDOUT 而不是 ping_err.log

注意:我只希望文件中有 STDERR(而不是 2>&1)

谢谢!

答案1

我不会回答你的重定向问题,而是stderr建议一个更好的(IMHO)方法:

输入https://github.com/waltinator/net-o-matic.git——监视(WiFi)网络故障,然后执行用户指定的事情来修复它。

有一种方法可以监控你的连接:

  ip monitor address | \
    egrep --line-buffered \
    '^Deleted [[:digit:]]+: [[:alnum:]]+[[:space:]]+inet[[:space:]].* scope global ' | \
    while read line ; do
       ...

我的net-o-matic脚本还包含一次询问的方法:

function netstate () {
    # Return network state as "UP" or "DOWN"
    #Adjust how you decide net is UP/DOWN
    ip link show | egrep -q 'UP,LOWER_UP.* state UP'
    if [[ $? -eq 0 ]] ; then
        echo "UP"
    else
        echo "DOWN"
    fi
}

答案2

使用您的代码,这似乎有效:

$ ping www.google.fr 2>&1 > /dev/null | while read pong; do echo "$(date): $pong" ; done 2>&1 > ping_err.log
[no output]
$ cat ping_err.log

vie jul  5 15:56:09 -03 2019: ping: sendmsg: La red es inaccesible
vie jul  5 15:56:10 -03 2019: ping: sendmsg: La red es inaccesible
vie jul  5 15:56:11 -...

答案3

我稍微扩展了@schrodigerscatcuriosity 的答案:

ping -i 10 -O -q 192.168.88.2 2>&1 | while read pong; do echo "$(date): $pong" ; done 2>&1 | tee ping_err.log
  • -i 10发送每个数据包前等待 10 秒
  • -O用于在发送下一个数据包之前记录未完成的 ICMP ECHO 回复
  • -q用于安静输出(超时除外)
  • | tee同时将输出打印到控制台和文件

相关内容