[Open BRT脚本的BASH脚本协助,如果ping响应/延迟很高,则执行命令

问题描述 投票:-1回答:2

正在寻找一些在OpenWRT上编写bash脚本的非常有用的帮助。我希望脚本检查OpenVPN连接的ping响应时间,并且响应时间(以毫秒为单位)是否超过某个阈值,然后执行诸如更改配置文件以连接到其他OpenVPN服务器的操作。我将通过OpenWRT防火墙上的crontab设置脚本。

到目前为止,我已经制定了命令以获取查询所需的毫秒形式的ping结果。

ping -c 1 1.1.1.1 |  awk 'FNR == 2 { print $(NF-1) }' | cut -d'=' -f2

这将对IP地址(在本例中为Cloudfare DNS)执行ping操作,并将ping ms时间打印到屏幕上。

我也可以修改此命令以将值写入文件,而不是使用stdbuf

ping -c 1 1.1.1.1 |  awk 'FNR == 2 { print $(NF-1) }' | stdbuf -o0 cut -d'=' -f2 > pingms

我需要一些帮助,然后通过stdout将此值或输出到文本文件,如果该值大于100ms,则执行操作。

例如如果值大于100ms(来自上述命令),则执行其他命令/脚本,否则不执行任何操作

任何帮助将不胜感激。

谢谢

bash openwrt openvpn
2个回答
0
投票

也许是这样。

#!/usr/bin/env sh

if [ $(ping -c 1 1.1.1.1 |  awk 'FNR == 2 { print $(NF-1) }' | stdbuf -o0 cut -d'=' -f2 ) -gt 100 ]; then
  echo "greater than 100 do something!"
else
  echo 'less than 100 nothing to do, bye...'
fi

0
投票

首先,在OpenWRT上,您将没有BASH shell,而是具有“限制”的shell,即ash。同样,stdbuf通常不是官方版本的一部分,busybox通常也不是,并且各种shell /体系结构组合对浮点的处理方式也不同,因此,我建议削减该部分以保持脚本体系结构和构建无关。希望以下oneliner可以帮助您。

[ $(ping -c1 1.1.1.1 | awk 'FNR == 2 { print $(NF-1) }' | cut -d'=' -f2 | cut -d'.' -f1) -gt 100 ] && echo "GT 100" || echo "LT 100"
© www.soinside.com 2019 - 2024. All rights reserved.