Site icon Gioxx.org

Raspberry Pi: Keep Me Alive!

raspberry pi, pi, computer

Photo by planet_fox on Pixabay

Hai presente quando vuoi fare in modo che – nel caso in cui ci siano dei problemi temporanei e non gravi di rete dal Raspberry Pi verso il mondo esterno (che vuol dire anche banalmente la raggiungibilità del router di casa) – il tuo giocattolo possa autonomamente provare a tornare raggiungibile senza il tuo intervento? Ecco, quello.

Keep Me Alive è il nome che ho dato a uno script di Bash che prende una base di partenza già ben scritta, la modifica secondo esigenza e fa in maniera tale da provare a far resuscitare la connettività del Raspberry Pi nel caso in cui questa venga a meno per qualsivoglia motivo (che poi potrai indagare subito dopo essere tornato disponibile alla connessione SSH).

KeepMeAlive.sh

La base di cui ti parlavo poco fa è quella di Dominic e l’ho trovata nel forum ufficiale della comunità RPi.
Quello di cui avevo bisogno io, contrariamente a lui, è di verificare che fosse connessa la porta di rete fisica, non la scheda WiFi. Per questo motivo ho leggermente ritoccato lo script e – per non farmi mancare nulla – ho anche cambiato il nome dei file prodotti (e relativa directory) e aggiunto un controllo che invia un’email nel caso in cui sia stato necessario riavviare l’intero sistema.

Ti mostro prima lo script, poi ti riporto alcune indicazioni:

#!/bin/bash
# This runs in Crontab to check that the eth0 is working.  If it is faulty it will
# firstly restart eth0 and check all is running well.  If not, the script will reboot the PI
# Any checks and reboots are stored as actions in txt files in /home/pi/Scripts
# Credits: Dominic 29/1/2020
# Mod: Gioxx 12/5/2022

# Check KMA_reboot and alert admin
rebootcheck=/home/pi/KMA/KMA_reboot.txt
if test -f "$rebootcheck"; then
    value=$(<"$rebootcheck")
    echo "RPi3-KMA: $value." | mail -s "RPi3-KMA alert: reboot found" user@contoso.com
    rm /home/pi/KMA/KMA_reboot.txt
fi

# Lines below are to get the date and time variables ready
BASHDATE=`date +"%b %d, %Y"`
BASHTIME=`date +" %T"`
DESTINATION="www.google.com"
# Start of code
ping -c1 ${DESTINATION} > /dev/null
if [ $? != 0 ]
then
#	eth0 is down so going into the next phase of this file to check, reset and reboot too if necessary
    echo eth0 all bad, restarting it on ${BASHDATE} at: ${BASHTIME} > /home/pi/KMA/KMA_bad.txt
    sudo ifconfig eth0 down
    sleep 5
#	Restarting eth0 if needed
    sudo ifconfig eth0 up
    sleep 18
    sleep 2
#	Re-pinging after eth0 re-start
    ping -c1 ${DESTINATION} > /dev/null
#	If Ping fails the PI will restart
    if [ $? != 0 ]
    then
        echo eth0 all bad, restarting the PI on ${BASHDATE} at: ${BASHTIME} > /home/pi/KMA/KMA_reboot.txt
        sleep 5
        sudo reboot
    fi

else
# If all is good this is written to a text file.
    echo eth0 all good on ${BASHDATE} at: ${BASHTIME} > /home/pi/KMA/KMA_good.txt
    echo eth0 all good on ${BASHDATE} at: ${BASHTIME}
fi

Cosa devi sapere:

echo "RPi3-KMA: $value." | mail -s "RPi3-KMA alert: reboot found" user@contoso.com
rm /home/pi/KMA/KMA_reboot.txt

Così facendo potrai sempre controllare manualmente se il RPi si è riavviato a causa di problemi di rete, basterà che ti assicuri dell’esistenza del file KMA_reboot.txt nella stessa cartella dello script bash.

È logico e va da sé che puoi ritoccare lo script come meglio credi per operare anche sulla scheda WiFi ammesso sia questa quella utilizzata dal tuo RPi. Io ho preferito connetterlo a rete cablata per maggiore stabilità ma capisco che altri potrebbero non essere nella stessa – indiscutibilmente comoda – situazione.

Programma il controllo

Fatti dare una mano da Crontab e decidi tu quando eseguire questo controllo. Non esagererei con troppe esecuzioni a tappeto ravvicinate tra di loro, usa sempre crontab.guru se non sai tradurre la programmazione in qualcosa di comprensibile per Crontab. Vuoi un esempio? Io lo faccio girare ogni due ore:

0 */2 * * * /home/pi/KMA/KeepMeAlive.sh

Se hai domande o idee, se pensi che ci sia qualcosa di migliorabile all’interno del codice o se vuoi riscriverlo da zero e proporre la tua versione beh, sentiti libero di commentare l’articolo! 🍻

#StaySafe

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

L'articolo potrebbe non essere aggiornato

Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)

Condividi l'articolo con i tuoi contatti:
Exit mobile version