cron - Invio e-mail ad ogni cambio IP

Nell'articolo Disabilitare invio e-mail di cron abbiamo visto come evitare l'invio di e-mail da parte di cron. Ora, però, vorrei farmi inviare un'e-mail dal mio pc ogni qual volta l'indirizzo IP (lato pubblico ovviamente) dovesse cambiare. Si lo so, ci sono molti siti che offrono lo stesso servizio gratis, e ci pensa il modem a fare direttamente tutto... ma allora il bello dov'è?!

Ho creato, quindi, uno script bash ed impostato la sua esecuzione nel mio crontab con una frequenza di 5 minuti.

Questo è il listato dello script:

#/bin/bash

CARICA_FTP=true
HOST="ftp.nomesito.it"
USER="nome_utente_ftp"
PASSWD="password_ftp"
IPADDRESS=$(elinks http://checkip.dyndns.com/ | sed -n 's/.*: \([^ ]*\).*/\1/p')
if [[ "${IPADDRESS}" != $(cat ~/current_ip.txt) ]]
then
  echo "Nuovo IP: ${IPADDRESS}"
  echo ""
  echo "--------------------------------------------"
  echo ""
  echo ${IPADDRESS} >~/current_ip.txt
  if ($CARICA_FTP) then
    ftp -n -v $HOST << EOT
user $USER $PASSWD
prompt
put ~/current_ip.txt /percorso/
bye
EOT
sleep 2
  fi
fi

Lo script verifica l'attuale IP pubblico tramite il sito http://checkip.dyndns.com/ e lo confronta con l'ultimo rilevato, memorizzato nel file ~/current_ip.txt. Ovviamente al primo avvio dello script, bisognerà creare il file txt, non necessariamente con l'IP scritto all'interno, basta anche un file vuoto, l'importante è che esista altrimenti lo script genererà un errore.
Se l'IP non è cambiato non succede nulla, diversamente, viene specificato il nuovo IP e viene anche aggiornato il file txt. Inoltre ho messo anche alcune righe a titolo di esempio nel caso si volesse usare il protocollo FTP per caricare il file txt (o effettuare qualche altra operazione) su un proprio spazio web.
Ora bisogna creare un'operazione pianificata nel nostro crontab affinchè lo script venga eseguito ad intervalli regolari.
Per fare questo basta modificare il file crontab ed inserire l'operazione.

Per modificare il file crontab basta lanciare il comando:

crontab -e

ed inserire le seguenti righe:

MAILTO=""
SHELL=/bin/bash
*/5 * * * * percorso/nome-script | mail -E -s "Oggetto della mail" indirizzo-mail

Una volta finito, CTRL+O e successivo INVIO per salvare, CTRL+X per uscire.

La riga MAILTO="" è stata discussa nell'articolo nominato all'inizio, mentre le 2 righe sottostanti servono per il nostro script:
SHELL identifica l'interprete che cron deve usare, mentre l'ultima riga avvia lo script ogni 5 minuti (*/5) e tramite pipe ( | ) invia poi il risultato per e-mail all'indirizzo che verrà specificato, l'opzione -E evita che vengano inviate e-mail vuote. Lo script genera output solo nel caso l'IP dovesse cambiare, ecco il motivo dell'opzione -E, altrimenti ogni 5 minuti arriverebbe comunque una mail vuota.