Skip to content

Instantly share code, notes, and snippets.

@smiell
Created November 16, 2023 21:57
Show Gist options
  • Save smiell/66badaa658cf0e01cc77a015f9106673 to your computer and use it in GitHub Desktop.
Save smiell/66badaa658cf0e01cc77a015f9106673 to your computer and use it in GitHub Desktop.
check3GConnection.sh
#!/bin/bash
# Sprawdź stan połączenia 3G
status=$(sudo sakis3g status)
# Sprawdź, czy połączenie jest aktywne
if [[ "$status" == "E3131 connected to Orange (26003)" ]]; then
echo "Połączenie 3G jest aktywne. Sprawdzanie dostępności internetu..."
# Sprawdź dostępność internetu przez ping
if ping -c 1 1.1.1.1 &> /dev/null; then
echo "Dostęp do Internetu potwierdzony. Zakończono."
exit 0
else
echo "Dostęp do Internetu niedostępny. Kontynuowanie próby nawiązania połączenia..."
fi
fi
echo "Brak połączenia 3G. Próba nawiązania połączenia..."
# Pętla prób nawiązania połączenia z przerwą 10 sekund między próbami
while true; do
# Nawiązywanie połączenia 3G
sudo sakis3g connect --console APN="internet" APN_USER="internet" APN_PASS="internet" USBINTERFACE="0"
# Poczekaj 10 sekund przed kolejną próbą
sleep 10
# Sprawdź stan połączenia po ponownej próbie
status=$(sudo sakis3g status)
# Sprawdź, czy połączenie zostało pomyślnie nawiązane
if [[ "$status" == *"connected"* ]]; then
echo "Połączenie 3G zostało pomyślnie nawiązane. Sprawdzanie dostępności internetu..."
# Sprawdź dostępność internetu przez ping
if ping -c 1 1.1.1.1 &> /dev/null; then
echo "Dostęp do Internetu potwierdzony. Zakończono."
exit 0
else
echo "Dostęp do Internetu niedostępny. Kontynuowanie próby nawiązania połączenia..."
fi
else
echo "Nie można nawiązać połączenia 3G. Kontynuowanie próby nawiązania połączenia..."
fi
done
@exa18
Copy link

exa18 commented Nov 17, 2023

pętla while mogłaby sprawdzać warunek
$? -gt 0
poza tym sam ping działa szybko ale gdy host nie jest dostępny to już jest kilka sekund
i dodanie parametru
-W 1
skróci czas

@exa18
Copy link

exa18 commented Nov 17, 2023

nie ma jak przetestować ale powinno działać, wg. twojego skryptu, czyli w pętli while sprawdź (check ustawiony na 1 by wymusić pętle) i jeżeli kod zwrócony jest 1 czyli brak połączenia, wykonaj próbe nawiązania i wykonaj pętle czyli na początku sprawdź połączenie po wykonanje próbie i jeżeli jest to koniec. Skrypt można wrzucić do crona żeby sprawdzał np. co minute.

#!/bin/bash                
#
checkstatus() {
status=$(sudo sakis3g status)
if [[ "$status" == *"connected"* ]]; then
        echo "Połączenie 3G zostało pomyślnie nawiązane. Sprawdzanie dostępności internetu..."

        if ping -c 1 -W 1 1.1.1.1 &> /dev/null; then
                echo "Dostęp do Internetu potwierdzony. Zakończono."
                return 0
        else
                echo "Dostęp do Internetu niedostępny. Kontynuowanie próby nawiązania połączenia..."
                return 1
        fi
else
        echo "Nie można nawiązać połączenia 3G. Kontynuowanie próby nawiązania połączenia..."
        return 1
fi
}
#
#
#
check=1
while [[ $check -gt 0 ]];do
checkstatus
check=$?
        if [[ $check -gt 0 ]];then
                sudo sakis3g connect --console APN="internet" APN_USER="internet" APN_PASS="internet" USBINTERFACE="0"
                sleep 5
        fi      
done

można dodać limit do ograniczenia liczby nieudanych prób

check=1
limit=10
while [[ $check -gt 0 && $limit -gt 0 ]] ;do
checkstatus
check=$?
        if [[ $check -gt 0 ]];then
                sudo sakis3g connect --console APN="internet" APN_USER="internet" APN_PASS="internet" USBINTERFACE="0"
                sleep 5
        fi 
limit=$((limit-1))
done

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment