[Risolto][bash] Script riconnessione

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
Dimension7
Prode Principiante
Messaggi: 109
Iscrizione: mercoledì 2 luglio 2008, 0:32
Località: Viterbo

[Risolto][bash] Script riconnessione

Messaggio da Dimension7 »

Ho un problema con la connessione wireless su ubuntu server 10.04 (ne parlo qui), in pratica se il router si spegne, al riavvio dello stesso il pc non si ricollega, lo fa se do il restart. Ho provato a cercare soluzioni ma non ho trovato nulla, al che ho pensato che il tutto potrebbe essere gestito da uno script bash, teoricamente dovrebbe essere facile (almeno nella mia ignoranza mi sembra che possa esserlo), mi basta uno script che ogni tot minuti controlli se la connessione al router è attiva (magari con il ping?), se non lo è da un restart alle connessioni ed ecco fatto.

Ora, la questione è che di scripting non ne so niente, quindi se ci fosse qualche anima pia disposta ad aiutarmi gliene sarei grato...
Ultima modifica di Dimension7 il sabato 17 dicembre 2011, 12:28, modificato 1 volta in totale.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [bash] Script riconnessione

Messaggio da Zoff »

che connessione devi fare?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
l3on4rdo

Re: [bash] Script riconnessione

Messaggio da l3on4rdo »

restart alla connessione?
???
Avatar utente
Dimension7
Prode Principiante
Messaggi: 109
Iscrizione: mercoledì 2 luglio 2008, 0:32
Località: Viterbo

Re: [bash] Script riconnessione

Messaggio da Dimension7 »

La connessione è tramite una penna wireless usb verso un router.

Dico restart perchè via tastiera per riconnettermi gli do il comando

Codice: Seleziona tutto

sudo /etc/init.d/network restart
sicuramente ci sarà un comando più semplice ma non lo conosco ;D
l3on4rdo

Re: [bash] Script riconnessione

Messaggio da l3on4rdo »

Non so, sono un po' affamato, ma una cosa del genere dovrebbe andar bene.

Codice: Seleziona tutto

#! /bin/bash

while true; do
    if ! ping -c 3 IP_ROUTER; then
        sleep 3
        if ! ping -c 3 IP_ROUTER; then
            sudo /etc/init.d/network restart
        fi
    fi
    sleep 3
done
Al posto di IP_ROUTER devi mettere l'ip effettivo.
Se è un ip che varia, puoi mettere $1 al posto di IP_ROUTER e poi lanciare lo script con l'ip del router come unico parametro.

ciao
Avatar utente
Dimension7
Prode Principiante
Messaggi: 109
Iscrizione: mercoledì 2 luglio 2008, 0:32
Località: Viterbo

Re: [bash] Script riconnessione

Messaggio da Dimension7 »

Ok, grazie ;)
L'ip è statico quindi non ci dovrebbero essere problemi: lo provo e ti faccio sapere come va
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [bash] Script riconnessione

Messaggio da Zoff »

In realtà molto meglio un cronjob, così ti risparmi di mettere lo script tra quelli di avvio.

Credo comunque che il comando a cui tu ti riferisci sia:
sudo /etc/init.d/networking restart

non:
sudo /etc/init.d/network restart

Crea uno script così:

Codice: Seleziona tutto

#! /bin/bash

IP_ROUTER="1.2.3.4"

if ! ping -c 3 $IP_ROUTER; then
    /etc/init.d/networking restart
fi
metti al posto di 1.2.3.4 l'ip giusto e salvalo dove ti pare.

Dopo di che fai:

Codice: Seleziona tutto

sudo crontab -e
Se richiesto seleziona "nano" come editor e inserisci questa riga:

Codice: Seleziona tutto

*/3 * * * * /path/dello/script/nomescript.sh
Fatto.
Ultima modifica di Zoff il sabato 17 dicembre 2011, 12:34, modificato 1 volta in totale.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
l3on4rdo

Re: [bash] Script riconnessione

Messaggio da l3on4rdo »

Con cron sicuramente è meglio.
Comunque, io ho messo due controlli con ping perché... non si sa mai :)

ciao
Avatar utente
Dimension7
Prode Principiante
Messaggi: 109
Iscrizione: mercoledì 2 luglio 2008, 0:32
Località: Viterbo

Re: [bash] Script riconnessione

Messaggio da Dimension7 »

Sto usando lo script di zoff, non sembra funzionare. Ho messo lo script in /mieiScript/scriptRiavvio.sh

Il testo è questo

Codice: Seleziona tutto

#! /bin/bash
IP_ROUTER="192.168.0.1"

if ! ping -c 3 IP_ROUTER; then
        /etc/init.d/networking restart
fi
L'IP è corretto al 100%, perchè è lo stesso indirizzo che uso per la pagina di configurazione del router.

Il file crontab è

Codice: Seleziona tutto

# m h  dom mon dow   command# m h  dom mon dow   command
*/3 * * * * /mieiScript/scriptRiavvio.sh
Da come mi hai detto di impostarlo, se ho capito bene lo script parte ogni minuto divisibile per tre, quindi ogni tre minuti in pratica. Per non sbagliare comunque ho aspettato anche più del doppio del tempo, ma niente. Non ho modificato lo script in nessun modo, ho solo creato il file scriptRiavvio.sh con nano e ci ho scritto dentro, ho sbagliato quello? Devo renderlo eseguibile?
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [bash] Script riconnessione

Messaggio da Zoff »

Dove si trova la cartella mieiscript?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
Dimension7
Prode Principiante
Messaggi: 109
Iscrizione: mercoledì 2 luglio 2008, 0:32
Località: Viterbo

Re: [bash] Script riconnessione

Messaggio da Dimension7 »

L'ho messa nella cartella principale, quella dove c'è media, lost+found, etc e tutto il resto. Ho sbagliato ad indirizzarla dentro crontab?
Comunque prima l'avevo messa nella mia home (l'utente si chiama davidep3) ma non riuscivo lo stesso ad indirizzarla correttamente credo...
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [bash] Script riconnessione

Messaggio da Zoff »

Hai provato a lanciare lo script a mano?

Prova a lanciare a mano questo:

Codice: Seleziona tutto

#! /bin/bash
IP_ROUTER="192.168.0.1"

if ! ping -c 3 IP_ROUTER; then
     /etc/init.d/networking restart
     echo "RIAVVIO eseguito"
else
     echo "NON riavviato"
fi
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
Dimension7
Prode Principiante
Messaggi: 109
Iscrizione: mercoledì 2 luglio 2008, 0:32
Località: Viterbo

Re: [bash] Script riconnessione

Messaggio da Dimension7 »

Ok, avevo sbagliato perchè non avevo reso eseguibile lo script: ora l'ho fatto e ho lanciato manualmente sia questo con gli echo di controllo, che l'altro, solo che c'è un altro problema: apparentemente anche se è collegato, esegue comunque il riavvio.

Codice: Seleziona tutto

davidep3@ubu-server:~$ ./scriptRiavvio.sh
ping: unknown host IP_ROUTER
 * Reconfiguring network interfaces...
ifdown: failed to open statefile /var/run/network/ifstate: Permission denied
ifup: failed to open statefile /var/run/network/ifstate: Permission denied
                                                                                                [fail]
RIAVVIO eseguito
Lo script vecchio si comporta identicamente, però senza la scritta "RIAVVIO eseguito", ovviamente.
Tutto ciò è avvenuto tramite putty, perciò il pc era per forza collegato al router.

Ora ho modificato lo script, in pratica invece di usare la variabile IP_ROUTER ho scritto direttamente l'indirizzo nell'if: lanciato a mano, capisce che è connesso quindi non riavvia la connessione. Invece quando serve la riavvia, quindi penso proprio sia risolto il problema, modifico il titolo.
Però non ho capito il motivo di questa cosa, di bash non ne so niente però insomma da quel che so di programmazione non ci dovrebbe essere nessun problema visto che è scritto in quella variabile... oppure ho capito male io, non so. Grazie della collaborazione a tutti ;)
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [bash] Script riconnessione

Messaggio da Zoff »

Hai usato sudo per modificare crontab?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
l3on4rdo

Re: [Risolto][bash] Script riconnessione

Messaggio da l3on4rdo »

manca la $ prima di IP_ROUTER, nell'if.
l3on4rdo

Re: [Risolto][bash] Script riconnessione

Messaggio da l3on4rdo »

Codice: Seleziona tutto

#! /bin/bash
IP_ROUTER="192.168.0.1"

if ! ping -c 3 $IP_ROUTER; then
     /etc/init.d/networking restart
     echo "RIAVVIO eseguito"
else
     echo "NON riavviato"
fi
Inizialmente io non avevo messo la $ perché immaginavo (come suggerivo) che lo avresti modificato a mano mettendo l'ip vero e proprio.
Se lo usi come variabile, devi mettere la $, altrimenti si connette proprio all'ip IP_ROUTER... che non esiste.
Come vedi anche così:
l3on4rdo@l3on4rdo-laptop:~$ IP_ROUTER="192.168.0.1"
l3on4rdo@l3on4rdo-laptop:~$ echo $IP_ROUTER
192.168.0.1
l3on4rdo@l3on4rdo-laptop:~$ echo IP_ROUTER
IP_ROUTER
ciao

@ Zoff
Come mai questa discussione è tra quelle evidenziate della sezione programmazione?
Ultima modifica di l3on4rdo il sabato 17 dicembre 2011, 12:34, modificato 1 volta in totale.
Avatar utente
Dimension7
Prode Principiante
Messaggi: 109
Iscrizione: mercoledì 2 luglio 2008, 0:32
Località: Viterbo

Re: [bash] Script riconnessione

Messaggio da Dimension7 »

Zoff ha scritto: Hai usato sudo per modificare crontab?
Si si, infatti la riconnessione me l'ha fatta automaticamente, senza che lanciassi io lo script.
l3on4rdo ha scritto: manca la $ prima di IP_ROUTER, nell'if.
Ah ecco spiegato tutto. Comunque credo che lo lascerò così, tanto in uno script di tre righe non cambia nulla usare la variabile o il vero indirizzo penso. Grazie ancora a entrambi  (good)
l3on4rdo

Re: [Risolto][bash] Script riconnessione

Messaggio da l3on4rdo »

Come abitudine, soprattutto quando si inizia con script corti, è bene sintonizzarsi con le pratiche "migliori" per la scrittura di codice.
Ti consiglio di scrivere come ha impostato la cosa Zoff.
Ovvero dai il valore alla variabile IP_ROUTER all'inizio e poi usi $IP_ROUTER.
Questo perché se un giorno dovessi cambiare ip... devi fare una modifica semplice e non devi andare a ripescare le cose all'interno dello script.

ciao
Avatar utente
Dimension7
Prode Principiante
Messaggi: 109
Iscrizione: mercoledì 2 luglio 2008, 0:32
Località: Viterbo

Re: [Risolto][bash] Script riconnessione

Messaggio da Dimension7 »

Si si, so che è buona pratica perchè basta cambiare la variabile all'inizio anzichè cercarla nello script, ma appunto essendo una cosa piccola di qualche riga non ce n'è bisogno ;)
Fosse stata una cosa più complessa l'avrei fatto subito...

ciao
asaki
Prode Principiante
Messaggi: 231
Iscrizione: lunedì 11 giugno 2007, 19:13

Re: [Risolto][bash] Script riconnessione

Messaggio da asaki »

Codice: Seleziona tutto

#! /bin/bash
IP_ROUTER="192.168.0.1"

if ! ping -c 3 $IP_ROUTER; then
     /etc/init.d/networking restart
     echo "RIAVVIO eseguito"
else
     echo "NON riavviato"
fi

una domanda ma mettendo la porta tipo IP_ROUTER="192.168.1.100:1000 per verificare un server locale funziona correttamente lo script?
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti