Сценарий ping для проверки доступности сети

Вы пытаетесь убежать не от if, а от test/ [. Но вы не тестируете выполнение killтаким образом; вы тестируете строки. Вы хотите:

if kill -0 "$LAST_PID"; then...

, что проверит код возврата kill.

0
24.06.2021, 14:11
1 ответ

Некоторые идеи:

  • pingимеет статус выхода -0, если он получил ответ, не -0, если нет. Вы можете использовать это вместо поиска.
  • Возможно, вы захотите запустить 4 команды ping параллельно и использовать waitдля их ожидания. Таким образом, вам не нужно ждать 4 неудачных пинга, чтобы узнать, что ваше интернет-соединение не работает.
  • В качестве альтернативы, если ваше соединение работает большую часть времени, вы можете остановиться после первого успешного пинга, поскольку вам нужно знать только, работает ли оно, а не сколько пунктов назначения вы можете достичь.

Этот сценарий (только для 2 IP-адресов и не включает ваши журналы, вы можете легко расширить его )даст ответ через очень короткое время (ваш работает не менее 30 секунд + любые тайм-ауты пинга )и вернуть статус выхода 0 или 1 в зависимости от того, успешно ли прошла проверка связи или все не удалось. Он использует опцию -W для установки короткого тайм-аута; если ваше интернет-соединение действительно нестабильно, по крайней мере, один из адресов должен вернуть ответ менее чем за секунду.

#!/bin/sh
IP1=8.8.8.8
IP2=4.4.4.4

#start first ping, remember its pid
ping -W 1 -c 1 $IP1 >/dev/null&
PID1=$!

# start second ping, remember its pid
ping -W 1 -c 1 $IP2 >/dev/null&
PID2=$!

# wait for pings to finish
if wait $PID1
then echo $IP1 is reachable, internet is working; exit 0
fi

if wait $PID2
then echo $IP2 is reachable, internet is working; exit 0
fi

# none reachable
echo all pings failed, internet is down
exit 1
0
28.07.2021, 11:22

Теги

Похожие вопросы