Watchdog - karta sieciowa się wiesza

Instalacja i konfiguracja oprogramowania sieciowego.
tofi
Piegowaty Guziec
Piegowaty Guziec
Posty: 26
Rejestracja: 01 paź 2008, 00:46
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Watchdog - karta sieciowa się wiesza

Post autor: tofi »

Czy ktoś ma pomysł na zrobienie wachdoga? Mam problem z moją kartą sieciową. Nieraz może chodzić bez przerwy kilka dni a nieraz nawet kilkukrotnie w ciągu dnia muszę wypinać wtyczkę USB. Podejrzewam że to kwestia elektroniki i przegrzewania się. W każdym bądź razie szukam sposobu na wykonanie resetu samego interfejsu sieciowego w przypadku braku pingów. Network-manager niestety tylko próbuje połączyć się ponownie, bez wykrycia że to jest wina karty.
Awatar użytkownika
ekitowski
Sędziwy Jeż
Sędziwy Jeż
Posty: 51
Rejestracja: 25 sie 2008, 15:03
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME
Kontakt:

Odp: Watchdog - karta sieciowa się wiesza

Post autor: ekitowski »

Karta sieciowa - i wypinasz wtyczkę USB - jak dla mnie to jakieś dziwne - masz sieciówkę na USB czy to zwykłe PCI. A czy zywkłe ifconfig interface down i up pomaga - bo jak tak to dość łatwo napisać skrypt w bashu i podpiąć go pod crona.
tofi
Piegowaty Guziec
Piegowaty Guziec
Posty: 26
Rejestracja: 01 paź 2008, 00:46
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Watchdog - karta sieciowa się wiesza

Post autor: tofi »

Sieciówka na USB (wifi). Sprawdzę z tym

Kod: Zaznacz cały

ifconfig wlan0 down
, bo od 3 dni się nic nie działo.

EDIT:
no i się stało, ale wystarczyło opuścić interfejs sieciowy by karta odzyskała sprawność. Network-manager sam ją podniósł. Teraz pytanie główne: jak zrobić watchdoga? ifconfig wymaga sudo na początku, zatem dodatkowo ten watchdog musi mieć możliwość dostępu do karty jako administrator bez konieczności pytania o hasło.
Awatar użytkownika
ekitowski
Sędziwy Jeż
Sędziwy Jeż
Posty: 51
Rejestracja: 25 sie 2008, 15:03
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME
Kontakt:

Odp: Watchdog - karta sieciowa się wiesza

Post autor: ekitowski »

Hm jeżeli chodzi o wywołanie skryptu z uprawnieniami roota to nie powinno być z tym problemu, rozwiązań kilka np: dodanie odpowiedniego skryptu do crona z uprawnieniami roota

Kod: Zaznacz cały

sudo crontab -u root
Albo inaczej - z wykorzystaniem sudo:

Kod: Zaznacz cały

echo "tajnehaslo" | sudo -S ./skrypt.sh
no albo zrobić roota właścicielem skryptu i ustawić SUID
No i pewno jeszcze coś by wymyślił.
Jak ja widzę taki skrypt - taki pseudkod :wink:

Kod: Zaznacz cały

Czy ping adres_routera !OK
to 
ifconfig wlan0 down
sleep 3
ifconfig wlan0 up

EndCzy
Dodałbym do do cron-a (ale dla roota) i ustawił coby się co 1 minutkę odpalało czy jak tam uważasz.

Hm... mógłbym podać Ci gotowca, no ale może dasz radę - w ten sposób na pewno więcej się nauczysz.

Pozdrawiam i życzę powodzenia.

P.S Poleciałem troszkę z tym pseudokodem :-)
tofi
Piegowaty Guziec
Piegowaty Guziec
Posty: 26
Rejestracja: 01 paź 2008, 00:46
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Watchdog - karta sieciowa się wiesza

Post autor: tofi »

sprawozdanie z postępów:
1. skrypt napisany, a właściwie przerobiony ze znalezionego gotowca, ale miał niektóre parametry wpisane na stałe, a teraz wystarczy wpisać dowolną liczbę hostów w zmienną hosts.
#!/bin/bash
HOSTS="192.168.0.1"
# no ping request
COUNT=10
RECCOUNT=0
MAXCOUNT=0
for myHost in $HOSTS
do
MAXCOUNT=$(($MAXCOUNT + $COUNT))
count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
RECCOUNT=$(($RECCOUNT + $count))
done
MAXCOUNT=$(($MAXCOUNT * 0.7))
if [ $RECCOUNT -lt $MAXCOUNT ]; then
ifconfig wlan0 down
sleep 3
ifconfig wlan0 up
fi
2 na crontabie w ogóle się nie znam, ale gnome-schedule (z repozytoriów) zna się lepiej ode mnie
sudo gnome-schedule
zastępuje bardzo dobrze
sudo crontab -u root
Pozostaje jeszcze jedna kwestia do rozwiązania. Po zerwaniu połączenia przez powieszenie karty network-manager próbuje połączyć się z poprzednimi parametrami i po nieudanym zestawieniu połączenia wyskakuje żądanie podania poprawnego klucza. Jak to ominąć? Reboot załatwia sprawę, bo network-manager łączy się z tym co ma wpisane, mimo że przed chwilą żądał klucza. Czy jest jakiś sposób na ponowne uruchomienie network-managera?

EDIT:
przetestowałem skrypt i przy braku połączenia jest błąd w 11 linijce
Awatar użytkownika
ekitowski
Sędziwy Jeż
Sędziwy Jeż
Posty: 51
Rejestracja: 25 sie 2008, 15:03
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME
Kontakt:

Odp: Watchdog - karta sieciowa się wiesza

Post autor: ekitowski »

No to kolego przekombinowałeś ostro :-)

No to troszkę uprościmy:

Kod: Zaznacz cały

ping -c1 -w 2 192.168.0.1 &>/dev/null &&  echo 'No to se mam połączenie z routerem'|| echo 'A to niedobra karta nie chce dzialac'
No to mamy już dość dużo. Teraz kolejny problem jaki spotkałeś...
Ja widzę rozwiązanie w pliku /etc/network/interface

Dla konfiguracji z dhcp:

Kod: Zaznacz cały

auto wlan0
iface wlan0 inet dhcp
        wireless-essid nazwa_sieci
        wireless-mode Managed
        wireless-key hasło_do_sieci
Dla statycznej konfiguracji:

Kod: Zaznacz cały

auto wlan0
iface wlan0 inet dhcp
        wireless-essid nazwa_sieci
        wireless-mode Managed
        wireless-key hasło_do_sieci
        address 192.168.0.100
        netmask 255.255.255.0
        gateway 192.168.0.1
Tu parę uwag:
Kiedyś miałem problem z kluczem i nie pamiętam dokładnie ale chyba wystarczyło dopisać
wireless-key open hasło_do_sieci - i to było dla klucza w postaci szesnastkowej
A jakoś innym razem to wpa-conf /etc/wpa_supplicant.conf - ale po szczegóły do trzeba googla zapytać...

No i teraz jakbyś miał ładnie skonfigurowaną sieć na tych plikach to:

Kod: Zaznacz cały

/etc/init.d/networking restart
w odpowiednim miejscu pierwszego polecenia z tego postu powinno załatwić sprawę.

A i jeszcze jedno - nie jestem pewny - ale jak używasz network-managera to możliwe że zechce on Ci sam nadpisywać powyższy plik.

Pozdrawiam
tofi
Piegowaty Guziec
Piegowaty Guziec
Posty: 26
Rejestracja: 01 paź 2008, 00:46
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Watchdog - karta sieciowa się wiesza

Post autor: tofi »

ekitowski pisze:
A i jeszcze jedno - nie jestem pewny - ale jak używasz network-managera to możliwe że zechce on Ci sam nadpisywać powyższy plik.

Pozdrawiam
Raczej na pewno bo /etc/init.d/networking restart niestety nie zadziałał w odniesieniu do karty wlan0. Sposób na network managera to wykonywać skrypt watchdoga co minutę a nie co 5. Nie podoba mi się tylko to że ping sprawdza jedną ramkę. Niby do routera jest najbliżej, ale zakłócenia się zawsze zdarzają a więc statystycznie w 50% tj. 1/(2^2) przypadków skrypt wykryje błąd i rozłączy sieć, dlatego mój skrypt musiał stwierdzić, że 70% pakietów nie dotarło. Z 10 ramek to pewność, że tylko 1 przypadek na 128 tj. 1/(2^7) to błąd spowodowany zakłóceniami. No ale w moim przypadku to się sprawdzi, bo u mnie zakłócenia w karcie powodują 100% spadek jakości połączenia. Dzięki! Jak będą problemy to jeszcze tutaj napiszę.

P.S. Właśnie zauważyłem że google-schedule dla roota nie trzeba wykonywać po przez sudo - jest wielki, jak chamski cyc, przycisk "Change user", zatem wystarczy uruchomić normalnie z menu.
tofi
Piegowaty Guziec
Piegowaty Guziec
Posty: 26
Rejestracja: 01 paź 2008, 00:46
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Re: Watchdog - karta sieciowa się wiesza

Post autor: tofi »

Wklejam tylko ostateczną wersję skryptu, bo po testach okazało się, że wcześniejszy skrypt działał tylko wtedy kiedy było połączenie, a gdy zawieszała się karta już nie, a gdy przerbiłem go to było na odwrót - wywalał błąd gdy było połączenie, a gdy go nie było działał prawidłowo. Ta wersja działa bez zarzutu

Kod: Zaznacz cały

#!/bin/bash
HOSTS="192.168.1.1"
# no ping request
COUNT=10
RECCOUNT=0
MAXCOUNT=0
for myHost in $HOSTS
do
MAXCOUNT=$(($MAXCOUNT + $COUNT))
count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if [ "$count" > 0 ]
then
RECCOUNT=$(($RECCOUNT + $count))
fi
done
MAXCOUNT=$(($MAXCOUNT * 0,7))
if [ $RECCOUNT -lt $MAXCOUNT ]; then
ifconfig wlan0 down
sleep 3
ifconfig wlan0 up
fi
ODPOWIEDZ

Wróć do „Sieci, serwery, Internet”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 5 gości