Помощь с BASH сценарием для брандмауэра OpenWRT для выполнения команды, если пинг отклик / задержка высока - PullRequest
0 голосов
/ 11 февраля 2020

Требуется помощь в написании скрипта bash для OpenWRT. Я хочу, чтобы скрипт проверял время отклика ping для соединения OpenVPN, и если время отклика в мс превышает определенный порог, чтобы затем выполнить действие, такое как изменение файла конфигурации для соединения с другим сервером OpenVPN. Я настрою скрипт через crontab на брандмауэре OpenWRT.

До сих пор я разработал команду для получения результата пинга в мс, который мне нужен для запроса.

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

Это пропингует IP-адрес (в данном случае Cloudfare DNS) и выводит на экран время пинга мс.

Я также могу изменить эту команду для записи значения в файл вместо этого, используя stdbuf

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

Мне нужна некоторая помощь, чтобы затем взять это значение либо через stdout, либо вывести в текстовый файл и выполнить действие, если значение больше, чем, скажем, 100 мс.

например. если значение больше 100 мс (из приведенной выше команды), выполните дополнительную команду / скрипт, в противном случае ничего не делайте

Любая помощь будет принята.

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Прежде всего, в OpenWRT у вас не будет оболочки BASH, скорее оболочки с «ограничениями», то есть ash. Также stdbuf обычно не является частью официальных сборок и busybox, и различные комбинации оболочки / архитектуры обрабатывают плавающие объекты по-разному, поэтому я рекомендую сократить дробь, чтобы сохранить архитектуру вашего скрипта и независимую от сборки. Я надеюсь, что следующий 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"
0 голосов
/ 11 февраля 2020

Нечто подобное может быть.

#!/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
...