Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam
Sytuacja wygląda tak:
Klient łączy się do serwera openvpn posiada głowne połaczenie z internetem i 3g skonfigurowane przez wvdial, może się podłączyc po 3g bądź normlanie, potrzebuje skryptu który w razie awarii łącza głownego łączył się z 3g w tle sprawdzając czy łącze główne wrociło.
Widze to mniejwięcej tak:
ping -I eth0 wp.pl -jest odpowiedz jest ok.
ping -I eth0 wp.pl - brak odpowiedzi (powiedzmy x3 (trzy utacone pakiety) przełączam na 3g
wvdial 3g &
i dalej...
ping -I eth0 wp.pl - połaczenia wróciło - killall -9 wvdial , poo- (wyłaczenie modemu)
Jak to ugryźć uczę się dopiero skryptowania.
Offline
Skoro klient, to na tym zarobisz. Sam podałeś wszystkie polecenia a nie chce Ci się tego sklecić w jedną całość?
Koncepcja może być, jeżeli to prośba "napiszcie bo nie chce mi się poszukać" to w dziale ogłoszenia wraz z proponowanym wynagrodzeniem :)
Jak będziesz miał napisane cokolwiek, do sprawdzenia, itp. to wtedy pisz tutaj.
Offline
Proponowałbym, zamiast polecenia ping użyć wget. Poczytaj man wgeta. Masz tam parametry typu "tries" i "timeout". Np.
wget -q --tries=5 --timeout=20 http://google.com
Reszta, to już prosty bash, którego polecam się samodzielnie poduczyć. Protip: uzyj polecenia "if" .
Masz tu kurs basha: http://www.fizyka.umk.pl/~karolamik/unix/skrypty/bash.pdf
Ostatnio edytowany przez krasnij (2014-10-04 19:28:15)
Offline
milyges napisał(-a):
Skoro klient, to na tym zarobisz. Sam podałeś wszystkie polecenia a nie chce Ci się tego sklecić w jedną całość?
Koncepcja może być, jeżeli to prośba "napiszcie bo nie chce mi się poszukać" to w dziale ogłoszenia wraz z proponowanym wynagrodzeniem :)
Jak będziesz miał napisane cokolwiek, do sprawdzenia, itp. to wtedy pisz tutaj.
Mialem na mysli realcje Host-Client ;(.
Offline
Zatem napisałem pierwszą wersje (bardziej poglądową)
#!/bin/bash rm /root/skrypt/ping sleep 1 ping -I eth0 -c 5 wp.pl >> /root/skrypt/ping sleep 10 bp=`grep -c "100%" /root/skrypt/ping` if [ $bp -eq 1 ] ; then echo "BRAK POLACZENIA, AKTYWUJE LACZE ZAPASOWE" wvdial 3g & else echo "Jest OK" fi
Planowałem skrypt odpalać w jakimś odstępie czasowym z crona ale jeżeli by już się zdarzyło że na interfejsie eth0 faktycznie zabraklo by internetu to skrypt bez końca odpalał by modem, pytanie czy jest jakas opcja żeby sobie taki skrypt działał cały czas w pętli w tle?
Offline
Na rybkę (fragment większej całości):
if [ $bp -eq 1 ] ; then if [ ! -f /root/skrypt/3g ] ; then echo "BRAK POŁĄCZENIA AKTYWUJĘ ZAPASOWE" touch /root/skrypt/3g wvdial 3g & fi else if [ -f /root/skrypt/3g ] ; then #tutaj polecenie zamknięcia połączenia 3g, nie znam się ale sobie dopisz rm /root/skrypt/3g fi echo "JEST OK" fi
I to do crona
Poza tym komplikujesz sytuację (ale rozumiem że czytanie manuali uważasz za stratę czasu):
If ping does not receive any reply packets at all it will exit with
code 1. If a packet count and deadline are both specified, and fewer
than count packets are received by the time the deadline has arrived,
it will also exit with code 1. On other error it exits with code 2.
Otherwise it exits with code 0. This makes it possible to use the exit
code to see if a host is alive or not.
Czyli wystarczy:
if ! ping -I eth0 -c 5 wp.pl >/dev/null ; then
zamiast bawić się w grepowanie wyników pinga.
Offline
Kod ethanaka jest najbliższy sensownemu rozwiązaniu, tylko co jeśli zostanie utracony 1 pakiet? :)
W bash'u występuje konstrukcja $() poza tym unix'owo jest grep.
Ale to zadanie domowe.
Ostatnio edytowany przez mkwiatkowski (2014-10-05 14:38:13)
Offline
Dzięki wielkie!, niestety
if ! ping -I eth0 -c 5 wp.pl >/dev/null ; then
Nie chciało działać więc zostałem przy grepie, ponadto rozwiązuje on problem jednego nieaktywnego pakietu bo wyszukuje tylko slowo 100% które występuje w wynikach tylko w wypadku utracenia wszystkich 5 pakietów.
Póki co skrypt jest jescze bez polecen bo na ta chwile nie mam dostępu fizycznego do tej maszyny ale jutro dopisze do końca.
Skrypt:
#!/bin/bash ping -I eth0 -c 5 wp.pl >> /root/skrypt/ping #Zapis wyników programu ping sleep 10 # Czas potrzebny na wykonanie programu z zapasem bp=`grep -c "100%" /root/skrypt/ping` #Analiza wyników programu ping if [ $bp -eq 1 ] ; then if [ ! -f /root/skrypt/3g ] ; then echo "BRAK POŁĄCZENIA AKTYWUJĘ ZAPASOWE" touch /root/skrypt/3g #Tworzenie pliku kontrolnego 3g echo "3G Aktywne" #wvdial 3g & fi else if [ -f /root/skrypt/3g ] ; then echo "Powrót połączcenia na łączu głównym, wyłączam łącze zapasowe" #killall -9 wvdial #poof rm /root/skrypt/3g #Usuniecie pliku kontrolnego 3g fi echo "JEST OK" fi rm /root/skrypt/ping #Usunięcie plikow wynikowych programu ping.
Ostatnio edytowany przez Firell (2014-10-06 01:35:24)
Offline
Firell napisał(-a):
Dzięki wielkie!, niestety
Kod:
if ! ping -I eth0 -c 5 wp.pl >/dev/null ; thenNie chciało działać więc zostałem przy grepie, ponadto rozwiązuje on problem jednego nieaktywnego pakietu bo wyszukuje tylko slowo 100% które występuje w wynikach tylko w wypadku utracenia wszystkich 5 pakietów.
Zawsze możesz sprawdzić czy $? == 1 (to powinno dać pewność że wszystkie pakiety są utracone)
A jeśli już koniecznie musisz pisać coś do pliku, to:
ping -I eth0 -c 5 wp.pl > /root/skrypt/ping #Zapis wyników programu ping
a nie
ping -I eth0 -c 5 wp.pl >> /root/skrypt/ping #Zapis wyników programu ping
Zgadnij dlaczego?
Przy okazji wyjaśnij do czego Ci ten sleep, bo albo czegoś nie rozumiesz albo nie wiem...
Jeszcze jedno: bezpieczniej będzie pingować znany adres IP (np. 194.204.152.34 - DNS tepsy) a nie wp.pl - że nie wspomnę o kilku hostach i podjęciu decyzji o przejściu na łącze zapasowe dopiero wtedy, kiedy wszystkie przestają odpowiadać.
Offline
Hmm, możliwe że czegoś nie rozumiem jak najbardziej ale widze to tak:
> - zapis do pliku
>> zapis do pliku linia po lini
Jeśli się mylę proszę Mnie poprawić.
Co do adresów kwestia umowna myslałem na dnsami od googli 8.8.8.8.
Co do sleep , faktycznie chyba nie jest potrzebny jak się głębiej zastanowić, nie chciałem żeby skrypt wydał polecenie pingowania po czym przeszedł do przeszukiwania pliku ktory nie zdążył jeszce się utworzyć ale teraz do Mnie dotarło że ping sam w sobie musi się wykonać i następne polecenia będą wykonywane po wykonaniu poprzedniego zatem sleep usuwam, dzięki.
#!/bin/bash ping -I eth0 -c 5 8.8.8.8 >> /root/skrypt/ping #Ping pierwszego hosta ping -I eth0 -c 5 194.204.152.34 >> /root/skrypt/ping2 #Ping drugiego hosta bp=`grep -c "100%" /root/skrypt/ping` #Analiza wyników ping bp2=`grep -c "100%" /root/skrypt/ping2` #Analiza wyników programu ping2 bpp=$[ bp + bp2 ] #Dodanie do siebie wyników z pingów if [ $bpp -eq 2 ] ; then if [ ! -f /root/skrypt/3g ] ; then echo "BRAK POŁĄCZENIA AKTYWUJĘ ZAPASOWE" touch /root/skrypt/3g #Tworzenie pliku kontrolnego 3g echo "3G Wlaczone" #wvdial PLAY & fi else if [ -f /root/skrypt/3g ] ; then echo "Powrót połączcenia na łączu głównym, wyłączam łącze zapasowe" #killall -9 wvdial #poof rm /root/skrypt/3g #Usuniecie pliku kontrolnego 3g fi
zmienne bp oraz bp2 zwracają wartość 1 jeżeli wszystkie 5 pakietów zostanie utracone, zatem jeżeli zmienna bpp (później je jakoś ludzko ponazywam) przyjmie wartość 2 (5 prob nie udanych na każdy z hostów) to wtedy rozpocznie sie aktywacja łącza zapasowego, jeżeli przynajmniej jeden z hostów odpowie łącze 3g się wyłączy.
Oczywiście cały czas jestem w trakcie usprawniania tego małego skryptu więc wszelkie sugestie i krytyka mile widziane ;)
Ostatnio edytowany przez Firell (2014-10-07 02:37:53)
Offline
Napewno zamienić
ping -I eth0 -c 5 8.8.8.8 >> /root/skrypt/ping #Ping pierwszego hosta ping -I eth0 -c 5 194.204.152.34 >> /root/skrypt/ping2 #Ping drugiego hosta
na
ping -I eth0 -c 5 8.8.8.8 > /root/skrypt/ping #Ping pierwszego hosta ping -I eth0 -c 5 194.204.152.34 > /root/skrypt/ping2 #Ping drugiego hosta
Offline
> - zapis do pliku (niszczy poprzednią zawartość
>> - dołączenie do istniejącego pliku (za poprzednią zawartością.
to tak na szybko bo na telefonie się nie będę rozpisywać
Offline
Aha czaje , w takim razie to bez różnicy skoro plik i tak jest usuwany po fakcie dobrze myśle?
Offline
ech....
#!/bin/bash #prog utraconych pakietow [%] prog=5 ip=x.x.x.x pingResult=100 pingResult=$(ping -q -w10 $ip | grep -o "[0-9]*%" | tr -d %) > /dev/null 2>&1 if [ "$pingResult" -gt "$prog" ]; then .... fi
Ale każdy ma jakieś zboczenia, niektórzy lubią zarżnąć dysk bzdurnymi zapisami.
Pomijam fakt, że jest to głupi sposób monitoringu.
Offline
Dobra, kolejny problem się pojawił....
Mianowicie łącze znika włącza sie 3g super! Tyle że wszystkie połączenia (tak mi się przynajmniej wydaje) dalej idą przez eth0, przykladowo po wykryciu niedziałającego eth0 ping wp.pl gubi wszystkie pakietu ale ping -I ppp0 już odpowiada... Co należy zrobić aby 3g przy aktywacji stał się łączem domyślnym?
Zmiana bramy? to raczej jest przypisane do konkretnego interfejsu?
Offline
# route add default gw x.x.x.x ppp0 #route del default gw y.y.y.y eth0
Polecam uzupełnić wiedzę o routing
Na deser krótki algorytm:
1) wykrycie utrate połaczenia z bramą operatora
2) przełączenie na łacze zapasowe
a) podniesienie interfejsu
b) zmiana tras domyślnych
c) przełączenie Firewall
d) reset połączeń
3) nasłuch na łączu głównym
4) wykrycie powrotu funkcjonalności dla łacza głównego
a) podniesienie interfejsu
b) zmiana tras domyślnych
c) przełączenie Firewall
d) reset połączeń
5) zwolnienie interfejsu zapasowego
Offline
no super...brame na łącze podstawaowe spoko moge przypisac na sztywno ale skąd mam wiedziec jaką brame dostane przez 3g?
Offline
Firell napisał(-a):
no super...brame na łącze podstawaowe spoko moge przypisac na sztywno ale skąd mam wiedziec jaką brame dostane przez 3g?
Z DHCP operatora?
Offline
No owszem, tylko jeżeli mam ustawić brame domyślną w ten sposób
# route add default gw x.x.x.x ppp0 #route del default gw y.y.y.y eth0
to musze ją znać chyba że się mylę?
Offline
tyle co ja wiem o sieciach to nie będzie działać bo brama musi być konkretnym IP.
Po co tyle kombinować, przed podniesieniem łącza 3g wyrzucić ustawienia bramy, podnieść interfejs 3g i brama sama się wpisze w tablicę routingu.
Ostatnio edytowany przez djjanek (2014-10-10 13:00:11)
Offline
djjanek napisał(-a):
tyle co ja wiem o sieciach to nie będzie działać bo brama musi być konkretnym IP.
Po co tyle kombinować, przed podniesieniem łącza 3g wyrzucić ustawienia bramy, podnieść interfejs 3g i brama sama się wpisze w tablicę routingu.
No raczej wszystkie skrypty lub narzędzia startujące PPP uzupełnią lub podadzą to co dostaną od dostawcy. I tutaj zdjęcie trasy domyślnej powinno spowodować z automatu dodanie trasy na nową bramę ( tą z PPP ).
Offline