Tempo fa abbiamo visto come usare il crontab. E’ possibile schedulare qualsiasi comando da shell agli intervalli desiderati. Sarà il demone di crontab a fare il resto al momento giusto.
Può capitare però che si voglia eseguire un file che di solito non facciamo girare direttamente da shell. E’ questo il caso dei file php, che per natura vanno attivati proprio dal php installato sulla macchina.
Quindi per prima cosa, nello schedulare un file php, dobbiamo assicurarci che il php stesso esegua un suo file, altrimenti nessun output verrà generato.
La cosa è relativamente semplice, ma può dipendere dalla configurazione del server. Se abbiamo settato bene la nostra bash ed abbiamo il comando php disponibile e vivo, basterà scrivere qualcosa del genere.
php /pat/to/script/miofile.php
Ma in questo caso il nostro file dovrà eseguire meramente del codice con output ben settato affinchè non venga rilasciato uno stream html o qualcosa del genere. Oltretutto abbiamo necessità (normale) di rendere il file eseguibile.
Capita però spesso che un identico file venga usato per essere evocato lato utente via browser, con un suo relativo output visuale e contemporaneamente anche da crontab per la gestione delle medesime operazioni, ma stavolta in stile automatizzato.
E’ il caso ad esempio dei file di backup. Spesso conviene scrivere un solo file e farlo azionare dall’utente se vuole eseguire un backup *ora* e contemporaneamente schedulizzarlo via crontab.
In questo caso la soluzione che ho trovato più conveniente è quella di richiamare ed eseguire il file via shell come se si stesse eseguendo da browser tradizionale. In una parola uso wget.
wget -q -O /dev/null ‘http://example.com/backup.php?myVar=thevar’
Facile ed indolore. Richiamo il file usando la stessa URL che userei via browser. Nell’esempio la chiamata è get, ma potrei anche decidere di inviare in dati via POST. Da non trascurare nemmeno la facilità con la quale posso passare le variabili.
L’opzione -q (–quite) mi permette di non avere output di tipo stringa, mentre con l’opzione -O decido di sbattere il file output direttamente in /dev/null, evitando di ritrovarmi la directory di esecuzione di wget piega di file backup.php vuoti.
Per maggiori informazioni su wget fate riferimento alla documentazione ufficiale.