Skocz do zawartości

Problem Ze Skryptem Bash


king_crim

Rekomendowane odpowiedzi

Witam

 

mam w mieszkaniu komputerek który robi za maleńki serwer, a że łączy się z netem poprzez wifi to postanowiłem napisać mały skrypt w bashu który bedzie co godzinkę sprawdzał czy działa net a jeśli nie to się łączył. I tutaj pojawia się problem, normalnie z netem łączy się w ten sposób:

fragment pliku /etc/rc.local:

iwconfig wlan0 essid hagala666 mode managment
iwconfig wlan0 rate 54Mb/s
iwconfig wlan0 channel 3
dhclient wlan0

 

więc napisałem taki oto skrypt który dodałem do crontab z poleceniem uruchamiania co godzinę z konta root:

#!/bin/bash
a=$(ping -c 2 google.pl|grep received |awk '{print $4}')
b=$(ping -c 2 wp.pl|grep received |awk '{print $4}')
data=$(date)
if [ "$a" -gt 0 ] || [ "$b" -gt 0 ]; then
        echo "$data *** jest net" >> /root/logi/net_log
else
        echo "$data *** nie ma neta" >> /root/logi/net_log
        killall dhclient
        iwconfig wlan0 essid hagala666 mode managment
        iwconfig wlan0 rate 54Mb/s
        iwconfig wlan0 channel 3
        dhclient wlan0
fi

 

Dodam, że skrypt działa poprawnie, co godzinę w pliku /root/logi/net_log bezbłędnie loguje mi czy net jest czy go nie ma...

Plik /root/logi/net_log jest nie dostępny z poziomu zwykłego usera więc mam pewność że skrypt jest uruchamiany z poziomu roota.

Pytanie brzmi: Dlaczego te same 4 linijki w /etc/rc.local łączą kompa z netem bez problemu, a gdy zostawie je tylko w skrypcie to się nie łączy ?

Odnośnik do komentarza
Udostępnij na innych stronach

Strzelam, że coś z dhclient, spróbuj killall -9 dhclient i dodaj po każdym iwconfig jeszcze jedno echo do pliku, wtedy zobaczysz na czym się zatrzymuje. Po ostatnim dhclient wlan0 dodaj też ping, bo może połączenie jest chwilowo nawiązywane a potem zrywane.

Odnośnik do komentarza
Udostępnij na innych stronach

gdy dodalem linijke z echem po kazdym poleceniu to w logach miałem ładnie kazde echo zapisane, wiec skrypt się nei zawiesza

 

stworzyłem wiec oddzielny skrypt net_on:

#!/bin/bash
killall -9 dhclient
sleep 2
iwconfig wlan0 essid hagala666 mode managment
iwconfig wlan0 rate 54Mb/s
iwconfig wlan0 channel 3
dhclient wlan0

 

i co prawda dopiero po drugim uruchomieniu, ale połączył mnie z netem:

 

[root@crimson skrypty]# ./net_on 
dhclient: nie zabito żadnego procesu
./net_on: line 11:  1989 Unicestwiony            dhclient wlan0
[root@crimson skrypty]# ./net_on 
dhclient: nie zabito żadnego procesu
[root@crimson skrypty]#

 

za to poniższy skrypt jest odpalany przez crona co minutę:

 

#!/bin/bash

a=$(ping -c 2 google.pl|grep received |awk '{print $4}')
b=$(ping -c 2 wp.pl|grep received |awk '{print $4}')

data=$(date)

if [ "$a" == 2 ] || [ "$b" == 2 ]; then
    echo "$data *** jest net" >> /root/logi/ping_test_log
else
    /root/skrypty/net_on
    echo "$data *** (_niema_ → nie ma) ORT neta" >> /root/logi/ping_test_log
fi

 

i nawet po 4 krotnym uruchomieniu się nie łączy, oto log:

[root@crimson logi]# cat /root/logi/ping_test_log 
Thu Jan 21 21:32:01 CET 2010 *** (_niema_ → nie ma) ORT neta
Thu Jan 21 21:33:01 CET 2010 *** (_niema_ → nie ma) ORT neta
Thu Jan 21 21:34:02 CET 2010 *** (_niema_ → nie ma) ORT neta
Thu Jan 21 21:35:01 CET 2010 *** (_niema_ → nie ma) ORT neta

 

nie mogę pojąc co za różnica czy sam odpalam skrypt, czy jest on uruchamiany przez skrypt uruchamiany przez crona...

ja moge polaczyc a cron nie :/

Odnośnik do komentarza
Udostępnij na innych stronach

Najczęstszą przyczyną nie działania skryptu w cron jest brak ścieżek do poleceń. Ja już dla świętego spokoju zawsze wklejam na początku w skrypcie:

export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

a dla graficznych z zenity dodatkowo jeszcze

export DISPLAY=:0.0
export LANG=pl_PL.UTF-8

Odnośnik do komentarza
Udostępnij na innych stronach

Najczęstszą przyczyną nie działania skryptu w cron jest brak ścieżek do poleceń. Ja już dla świętego spokoju zawsze wklejam na początku w skrypcie:
export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

a dla graficznych z zenity dodatkowo jeszcze

export DISPLAY=:0.0
export LANG=pl_PL.UTF-8

 

Dzięki wielkie borzole !

Okazuje się że właśnie o to chodziło.

pozdrawiam i jeszcze raz dziękuję :)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...