Вы имеете в виду что-то настолько простое, как это?:
while :; do
ping -c 1 -w 3 8.8.8.8; echo $? > /tmp/ping.status
sleep 1
done
Это будет записывать статус выхода ping
в /tmp/ping.status
один раз в секунду. Затем в другом скрипте у вас может быть что-то вроде:
pingFailed=$(cat /tmp/ping.status)
if [ $pingFailed -ne 0 ]; then
echo "No connection"
else
echo "Connected!"
fi
Так что да, вы могли бы сделать это. Тем не менее, это действительно плохой метод проверки вашего соединения. Очевидно, здесь есть условия для гонки. То, что соединение было активным во время выполнения первого цикла, не означает, что оно активно и сейчас. Что еще более важно, если вы читаете файл ping.status
в начале скрипта, это не означает, что соединение останется в его конце. Кроме того, вы засоряете сеть и процессор непрерывными запросами. Это действительно не очень элегантно.
Более быстрый и простой способ проверки работоспособности соединения (по крайней мере в Linux )— это просмотр /sys/class/net/$NIC/link_mode
, где $NIC
— имя вашей сетевой карты. Например, в моей системе:
## Wireless connection up
$ cat /sys/class/net/wlp3s0/link_mode
1
## Wireless connection down
$ cat /sys/class/net/wlp3s0/link_mode
0
Вы можете написать функцию, которая проверяет это:
isLinkDown(){
return $(cat /sys/class/net/wlp3s0/link_mode)
}
И вы можете использовать его в своих скриптах вот так:
if isLinkDown; then
echo Link Down
else
echo Link Up