Come posso verificare la connessione a Internet prima di eseguire lo script /etc/rc.local


8

Voglio usare Raspberry Pi come gateway VPN. L'RPi si collega alla mia rete domestica e Internet tramite wlan0, andqualsiasi dispositivo collegato eth0ottiene una connessione VPN. Sto usando pptp-linuxper rendere la connessione VPN e tutto ha funzionato bene durante la mia fase di prototipazione. Tuttavia, per completare il progetto ho inserito la connessione VPN nello /etc/rc.localscript in modo che inizi all'avvio. Ora fallisce il 50% delle volte. Sospetto che stia tentando la connessione VPN prima che io sia correttamente connesso a Internet via wlan0. Se questo è il problema, ho bisogno di un test per una connessione Internet valida all'inizio di rc.localprima di procedere con il resto dello script. Qualche idea su come potrei farlo?


Potresti aggiungere un sleep 20prima del tuo script. O meglio, inserisci la tua sceneggiatura /etc/network/if-up.d. In questo modo lo script viene eseguito una volta che l'interfaccia di rete si alza.
Gerben,

Risposte:



4

proprio dalla cima della mia testa:

  1. ping il tuo router

  2. ping google.com

  3. ifconfigoutput grep per gateway valido e / o indirizzo IP valido


Avresti bisogno grepdei ping per una risposta valida. In breve tempo fino a quando tutte le condizioni sono soddisfatte. Il solo ping non farà molto. Jivings ha citato una buona riga di codice.
Piotr Kula,

@ppumkin non c'è bisogno di usare grep, il ping usa i codici di uscita per ping -qc 1 192.168.1.1 && echo ok || echo error
parlarti

4

Basato sul codice di esempio Jivings e parte della mia logica.

#!/bin/bash

STATE="error";

while [  $STATE == "error" ]; do
    #do a ping and check that its not a default message or change to grep for something else
    STATE=$(ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo ok || echo error)

    #sleep for 2 seconds and try again
    sleep 2
 done

#put your VPN code here...

Il modo corretto sarebbe quello di creare una funzione che restituisca un valore booleano sul comparatore while. ma è così che dovrebbe apparire la logica della shell.


1

Debian ora usa upstart. Questo è probabilmente un modo molto più semplice di farlo con gli script init.d.

Potrebbe essere necessario provare alcuni servizi diversi per attendere, ma networking(se è presente) o network-managerpotrebbe essere uno di quelli buoni da provare prima.

Questo è per Ubuntu, ma non dovresti trovare troppe differenze http://upstart.ubuntu.com/cookbook/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.