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.