Stavo modificando questo programma e, come buona pratica di sicurezza, elimino i token hardwired per passarli come variabili d’ambiente: ciò, oltre a rendere la configurazione più semplice e universale, permette di condividere il codice senza doverlo “sanificare” togliendo dei dati privati.
E niente, faccio la modifica e improvvisamente il programma smette di funzionare. Se eseguito a mano funziona regolamente, ma dal cronjob no, non c’è verso. Ovviamente, non ci vuole un genio a capire che la problematica dev’essere nella parte logica modificata, ossia le variabili d’ambiente.
E, infatti, basta una ricerca Google per scoprire che cron e le variabili d’ambiente, specie se impostate per un utente locale, non sono… propriamente amici, diciamola così.
Visto che ogni distro Linux viene spedita con la propria versione di cron esistono varie soluzioni distro-specifiche, alcune le trovate qui, ma in ogni caso c’è una soluzione universale che dovrebbe funzionare su ogni distribuzione, ossia aggiungere il comando “. [path vostro file variabili];” prima del comando effettivo.
Quindi, se ad esempio dovete eseguire /home/luigi/foto-webcam.sh, nel cron, dopo la parte temporale, scriverete:
. /home/luigi/.profile; /home/luigi/foto-webcam.sh
Cosa vuol dire? Il punto è l’equivalente del comando source, che è quello che si usa in una shell per caricare immediatamente delle variabili d’ambiente modificate, e il path è il file con le vostre variabili d’ambiente, si termina il primo comando e si esegue il secondo, con le variabili d’ambiente settate.