Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

PHP e crontab: programmare l'esecuzione degli script

Come eseguire automaticamente istruzioni in PHP su un sistema Linux utilizzando Crontab e l'interfaccia a riga di comando.
Come eseguire automaticamente istruzioni in PHP su un sistema Linux utilizzando Crontab e l'interfaccia a riga di comando.
Link copiato negli appunti

Crontab è un programma utilizzato all'interno di sistemi operativi Linux e Unix per l'esecuzione di determinate istruzioni ad intervalli di tempo regolari o in un particolare momento predefinito dall'utente (scheduling); il crontab è quindi anche un'operazione per la registrazione di comandi che dovranno essere eseguiti automaticamente sulla base di regole stabilite dall'utente, questa operazione viene generalmente scritta all'interno di file che contengono la lista delle istruzioni da eseguire.

Generalmente un'operazione di pianificazione tramite crontab presenta nella sua procedura alcune costanti:

  • l'intervallo di tempo o il momento specifico in cui dovranno essere eseguiti i comandi;
  • il riferimento all'eseguibile che si occuperà di rendere effettive le istruzioni contenute;
  • i comandi da eseguire, cioè le operazioni da compiere;
  • (opzionalmente) l'utente per cui sono validi i comandi da eseguire.

Un classico esempio di crontab è quello relativo alla realizzazione di un file contenente le istruzioni per pianificare nel tempo la creazione di copie di sicurezza di file, record di database o impostazioni di sistema; si tratta di elementi che subiscono spesso delle modifiche, diventa quindi necessario (anche per questioni di sicurezza) programmare dei backup periodici

Nel corso di questa breve trattazione vedremo come sia possibile creare file di crontab per eseguire operazioni in un linguaggio solitamente destinato ad altri scopi, la generazione di pagine Web, come PHP.

Crontab PHP e directory di esecuzione

In ambiente Linux il crontab si basa sulla presenza di un demone (daemon in lingua Inglese, cioè processo in esecuzione in background) denominato Crond che, senza alcun intervento dell'utente, accede periodicamente (generalmente una volta ogni minuto) ai contenuti del registro dei comandi programmati (cronjobs) e manda in esecuzione quelli previsti per l'intervallo di tempo corrente o per i quali è terminato il periodo di attesa.

Generalmente queste istruzioni sono salvate in file memorizzati all'interno della directory /etc o delle sue sottocartelle.

Per quanto riguarda i crontab realizzati per PHP la procedura non è sostanzialmente differente: possono essere eseguiti tramite crontab tutti i comandi che è possibile richiamare da shell tramite istruzioni da linea di comando e questo è possibile anche per le istruzioni scritte in PHP grazie al supporto per CLI (Command Line Interface).

Un'istruzione da shell può contenere la lista completa delle istruzioni da eseguire, oppure è possibile richiamare il file contenente le istruzioni grazie all'interprete del linguaggio, ad esempio:

/usr/local/bin/php /directory/file.php

Nell'esempio appena esposto, l'interprete (/usr/local/bin/php) non è necessariamente collocato nella stessa directory del file PHP destinato ad eseguire le istruzioni, ma sarà quest'ultimo a generare l'output; se invece si desidera rindirizzare l'output su un terzo file questo dovrà essere specificato nel comando:

/usr/local/bin/php /directory/file.php > /directory/file

Un file crontab funziona nello stesso modo con alcune sostanziali differenze:

  • il comando (o i comandi) non viene lanciato da Shell ma è scritto e memorizzato in un file;
  • l'utente non dovrà intervenire manualmente per l'esecuzione delle istruzioni (anche se queste dovranno essere ripetute più volte);
  • le istruzioni verranno eseguite in un momento specificato dall'utente.
  • Sintassi di un file Crontab

    Per modificare un file crontab all'interno di un sistema Linux si utilizza la seguente sintassi:

    # crontab [-e [-u username] | -l [-u username] | -r [-u username] | file]
    

    I parametri utilizzati per eseguire l'istruzione sono i seguenti:

    • -e
    • -l
    • -u
    • -r

    Una volta modificato, il file sarà memorizzato nell'apposita directory, nel caso in cui sia già presente un altro file quest'ultimo sarà sovrascritto.

    Per scrivere correttamente un file di crontab è necessario rispettare una determinata sintassi, diversamente questo potrebbe non funzionare correttamente; le istruzioni dovranno contenere alcuni parametri obbligatori elencati nella lista seguente:

    • Minuti
    • Ore
    • Giorno del mese
    • Mese
    • Giorno della settimana
    • Comando

    I parametri elencati potranno essere espressi anche attraverso caratteri speciali da utilizzare in particolare quando si desidera esprimere valori multipli:

    • Virgola ,
    • Trattino -
    • Asterisco *

    L'ultimo carattere speciale potrà essere utilizzato al posto di uno qualsiasi dei primi 5 parametri elencati in precedenza; per cui, volendo fare degli esempi si avrà che:

    • 12,50 * * * * /directory/istruzioni
    • 0 12 * * * /directory/istruzioni
    • 50 10 15,16 * * /directory/istruzioni
    • * * * * * /directory/istruzioni

    Opzionalmente, oltre ai parametri specificati, sarà possibile associare alle istruzioni per il crontab due ulteriori argomenti:

    • un Log file >>file.log
    • un Error file 2 2>>file.err

    Nel creare un file di crontab per PHP è bene tenere presente che l'output generato dalle istruzioni non è destinato alla visualizzazione tramite browser, per questo motivo non sarà necessario utilizzare markup HTML.

    Un semplice esempio pratico di file Crontab in PHP

    Si prenda come esempio il seguente script PHP:

    <?php   
    # registrazione della data corrente in una variabile   
    
    # apertura in scrittura di un file di log
    
    # scrittura della data corrente sul file di log      
    
    #chiusura del file      
    
    

    L'applicazione funziona in modo molto semplice:

    • registra la data odierna;
    • crea e apre un file di log denominato con la data corrente;
    • scrive data e ora corrente nel file;
    • chiude il file.

    Ora si immagini di salvare lo script in un file chiamato cron.php cron.php

    55 14 * * 4  php  --q  directory/cron.php
    

    Il primo e il secondo valore ("55" e "14") indicheranno rispettivamente i minuti e l'ora; i due asterischi indicheranno rispettivamente tutti i giorni del mese e tutti i mesi; "4" indicherà il 4° giorno della settimana.

    L'istruzione contenuta nel file di crontab (php --q directory/cron.php) garantirà l'esecuzione del codice contenuto in cron.php nel periodo di tempo previsto.

    Conclusioni

    Pianificare attraverso crontab l'esecuzione di determinate applicazioni PHP in periodi predefiniti di tempo può risultare una procedura molto utile per limitare il numero di operazioni da compiere manualmente. È possibile creare file di crontab per effettuare copie di salvataggio di dati, inviare posta elettronica, temporizzate la pubblicazione di articoli su un blog, eliminare record inutili, ottimizzare tabelle e molto altro.

    Anche se la sintassi necessaria per la creazione di file di crontab è molto semplice, è bene osservare attentamente le regole previste per questo tipo di documenti in modo da evitare malfunzionamenti.

    In questa brave trattazione sono stati quindi affrontati tutti gli argomenti necessari (parametri obbligatori ed opzionali, sintassi, caratteri speciali,regole di allineamento etc.) per procedere alla creazione di file di crontab per PHP.

Ti consigliamo anche