Skrypt w bashu w

Potrzebujesz pomocy z C, C++, perl, python, itp.
conficker12
Posty: 1
Rejestracja: 22 maja 2012, 17:58

Skrypt w bashu włączany cyklicznie z crona

Post autor: conficker12 »

Witam.
Czy mógłby mi ktoś sprawdzić poprawność skryptu w bashu?

Kod: Zaznacz cały

#!/bin/bash

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


 if [ "$a" == 2 ] || [ "$b" == 2 ]; 
 then
     echo "jest net"
 else
     /sbin/reboot
 fi
 
Nie wiem dlaczego nie wykonuje mi się:

Kod: Zaznacz cały

echo "jest net"
a system się restartuje gdy nie ma połączenia.

Używaj znaczników code wstawiając na forum kod programu itp. Stosuj się do zasad obowiązującej pisowni.
fnmirk
Awatar użytkownika
DaVidoSS
Junior Member
Posty: 875
Rejestracja: 06 marca 2010, 11:26
Lokalizacja: ~/

Post autor: DaVidoSS »

Radzę zoptymalizować kod:

Kod: Zaznacz cały

#!/bin/bash


if [[ $(ping -c 2 google.pl 2>/dev/null)  ]] || [[ $(ping -c 2 wp.pl 2>/dev/null) ]]; then

        echo "jest net"
else

        reboot
fi


Legenda:

Kod: Zaznacz cały


Jeżeli ping google prawda lub  ping wp prawda wtedy ;
wypisz  Jest net
Jeżeli nie prawda to
zrestartuj pc


Reszta to prawidłowe użycie cron oraz:

1. Po co echo " jest net " skoro ma to być uruchamiane przez cron?
2. Po co ten restart. Samo zrestartowanie interfejsów sieciowych nie wystarczy?

Jeszcze bardziej zwięźle widzę to tak:

Kod: Zaznacz cały


#!/bin/bash
######################################################################
###    Restart interfejsu sieciowego po utracie polaczenia"        ###
######################################################################

interface=eth0     # aktywne i skonfigurowane interfejsy sieciowe (eth0 wlan0 ppp0 usb0) itp..
domain1=google.pl
domain2=wp.pl

if [[ ! $(ping -c 2 $domain1 2>/dev/null)  ]] || [[ ! $(ping -c 2 $domain2 2>/dev/null) ]]; then

       ifdown $interface && ifup  $interface

fi
exit 0




Kod: Zaznacz cały

chmod +x /bin/net_check.sh

oraz przykładowy co 10-cio minutowy wpis w /etc/crontab:

Kod: Zaznacz cały

10,20,30,40,50,59 * * * * root /bin/net_check.sh 
ODPOWIEDZ