Создание bash-скрипта для проверки подключения и изменения подключения при необходимости. Помогите мне улучшить это? - PullRequest
2 голосов
/ 28 марта 2010

Мое соединение ненадежное, но у меня есть резервное. Я сделал несколько сценариев bash для проверки подключения и изменения подключения, если текущий не работает. Пожалуйста, помогите мне улучшить их.

Сценарии почти работают, за исключением того, что они не ждут достаточно долго, чтобы получить IP (он слишком быстро переходит к следующему шагу в цикле до). Здесь идет:

#!/bin/bash
# Invoke this script with paths to your connection specific scripts, for example
# ./gotnet.sh ./connection.sh ./connection2.sh

until [ -z "$1" ]  # Try different connections until we are online...
    do
    if eval "ping -c 1 google.com"
    then
        echo "we are online!" && break
    else
    $1     # Runs (next) connection-script.
    echo
    fi
     shift
   done

   echo               # Extra line feed.
exit 0

А вот пример скриптов подчиненных:

#!/bin/bash
ifconfig wlan0 down
ifconfig wlan0 up
iwconfig wlan0 key 1234567890
iwconfig wlan0 essid example
sleep 1
dhclient -1 -nw wlan0
sleep 3
exit 0

Ответы [ 3 ]

6 голосов
/ 29 марта 2010

Вот один из способов сделать это:

#!/bin/bash
while true; do
        if ! [ "`ping -c 1 google.com; echo $?`" ]; then #if ping exits nonzero...
                ./connection_script1.sh #run the first script
                sleep 10     #give it a few seconds to complete
        fi
        if ! [ "`ping -c 1 google.com; echo $?`" ]; then #if ping *still* exits nonzero...
                ./connection_script2.sh #run the second script
                sleep 10     #give it a few seconds to complete
        fi
        sleep 300 #check again in five minutes
done

Настройте время сна и количество пингов в соответствии с вашими предпочтениями.Этот сценарий никогда не завершается, поэтому вы, скорее всего, захотите запустить его с помощью следующей команды:

. / Connection_daemon.sh 2> & 1> / dev / null & disown

2 голосов
/ 28 марта 2010

Вы пытались опустить параметр -nw в команде dhclient?

Кроме того, удалите eval и кавычки из вашего if, они не нужны. Сделайте это так:

if ping -c 1 google.com > /dev/null 2>&1
0 голосов
/ 28 марта 2010

Попытка где-нибудь использовать ConnectTimeout $ {timeout}.

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