Come fare uno script che gira ogni tot di tempo con php e cron
Posted on 11. Nov, 2008 by Administrator in php, tutorials
Tramite l’utilizzo del crontab è possibile sviluppare un programma che “gira” ogni tot di tempo oppure in determinati momenti della giornata predefiniti.
Il tutto, una volta capito il meccanismo, è molto semplice.
Per prima cosa occorre capire che un programma php può essere lanciato anche da linea di comando. L’output sarà la shell da cui si esegue, oppure può essere ri-diretto su file aggiungendo in fondo > /nome_directory/nome_file.
Siccome l’output non avviene su un browser è opportuno ricordare che la formattazione HTML non ha più senso. Quindi, ad esempio, un “a capo” va effettuato non con il BR ma con un \n.
Per lanciare il programma PHP da linea di comando bisogna premettere al sorgente PHP l’eseguibile che lo interpreta, ecco ad esempio la linea di comando su un server linux:
/usr/local/bin/php /directory_programma/nome_programma.php
In questo caso l’interprete PHP è /usr/local/bin/php mentre il programma è /directory_programma/nome_programma.php.
Per ridirigere l’output su un file il comando va modificato in questo modo:
/usr/local/bin/php /directory_programma/nome_programma.php > /dir_output/file_output
Dove /dir_output/file_output sarà il nome del file su cui verrà scritto l’output.
A questo punto vediamo di capire cosa occorre scrivere nel crontab (da linea di comando il crontab si può editare tramite il comando “crontab -e“):
* un valore che indica il minuto (da 0 a 59)
* un valore che indica l’ora (da 0 a 23)
* un valore che indica il giorno del mese (da 1 a 31)
* un valore che indica il mese (da 1 a 12)
* un valore che indica il giorno della settimana (da 0 a 7 - 0 significa domenica)
* il file di comando da lanciare come spiegato più sopra
I valori sopracitati possono essere sostituiti da dei valori multipli, che possono essere:
* * (asterisco) significa “in ciascuno” - quindi se lo si indica nel primo campo significa “in ciascun minuto”
* 0,5,10 ossia valori separati da virgole (e senza spazi) significa in ciascuno di quei valori - nell’esempio se si considera che 0,5,10 siano il primo campo significa al minuto 0, al minuto 5, al minuto 10
* 0-10 ossia valori separati da trattino (e senza spazi) significa in ciascuno dei valori nel range - nell’esempio tutti i minuti da 0 a 10, equivalente a 0,1,2,3,4,5,6,7,8,9,10
Infine eccovi alcuni esempi:
* * * * * * /dir/comando
significa: esegui il comando ogni minuto
* 15,45 * * * * /dir/comando
significa: esegui il comando due volte ogni ora, ai minuti 15 e 45 (quindi alle 0:15 0:45 1:15 1:45 eccetera)
* 0 2 * * * /dir/comando
significa: esegui il comando ogni notte alle 2 precise
* 5 12 10,20 * * /dir/comando
significa: esegui il comando il 10 e il 20 di ogni mese alle 12:05
Via: http://www.senamion.it/...-php-che-gira-ogni-tot-di-tempo/



Leave a reply