X

Introduzione al servizio Cron su Plesk

Cos’è il Cron

E’ un servizio delle macchine UNIX che serve per programmare nel tempo un comando. Con Cron definiamo il servizio, con Crontab il suo file di configurazione . Ad esempio, attraverso un Crontab, si può decidere di schedulare (dall’inglese ‘to schedule’ ) il richiamo di uno script PHP o Perl perchè quest’ultimo effettui un’operazione in dato momento o sistematicamente ogni periodo di tempo impostato.

Il settaggio di un crontab è facilitato se disponiamo per la gestione del nostro server di un pannello di controllo Plesk.

Un esempio di Crontab

Una classica riga di comando di un Crontab è questa

* * * * * usr/bin/php -q /var/www/vhosts/miodominio/httpdocs/scriptdaeseguire.php

I primi asterischi indicano la temporalità e/o ciclicità del comando. L’asterisco è un carattere jolly che può essere sostituito da un numero. In particolare

  • il primo valore indica i minuti di un’ora (valore da 0 a 59)
  • il secondo valore indica le ore di un giorno (valore da 0 a 23)
  • il terzo valore indica il giorno del mese (valore da 1 a 31)
  • il quarto valore indica il mese dell’anno (valore da 1 a 12 ma è possibile usare anche il nome letterale in inglese)
  • il quinto valore indica il giorno della settimana (valore da 0 a 7 ma è possibile usare anche nome letterale in inglese). Sia 0 che 7 indicano la domenica.

“usr/bin/php” indica il percorso all’interprete o al compilatore o al programma generico coinvolto nell’operazione (-q è un parametro specifico che indica il ‘quiet mode’ ossia l’omissione di messaggi superflui di avviso). Questo percorso può essere facilmente indicato dall’amministratore del server.

“/var/www/vhosts/miodominio/httpdocs/scriptdaeseguire.php” indica il percorso fisico sul server che porta allo script o al programma da eseguire. Per ricavare questo percorso con PHP basta utilizzare la funzione phpinfo() .

Es. se io volessi avviare quello script ogni 15 minuti di ogni giorno di ogni mese setterei i primi valori in questo modo
*/15 * * * * usr/bin/php -q /var/www/vhosts/miodominio/httpdocs/scriptdaeseguire.php

Da notare lo slash e poi il numero dell’intervallo temporale settato a 15 per i minuti. Tutti gli altri valori sono a jolly quindi valgono per ogni ora di ogni giorno di ogni mese ecc.

Crontab su Plesk

Settare un Crontab manualmente, con riga di comando su macchine UNIX è roba da specialisti mentre non lo è se si dispone del pannello Plesk per la gestione dei propri domini.
Di seguito la procedura

  1. Login nel proprio pannello Plesk
  2. clic su Domains (Domini in italiano)
  3. Selezionare il dominio sul quale si vuol creare il Crontab
  4. Nella sezione Hosting cliccare sull’icona del Crontab
  5. Se sono presenti più System User (Utenti di Sistema) bisogna selezionare quello che deve effettuare l’operazione
  6. Clic su Schedule Task (Programma Azione)
  7. Adesso bisogna introdurre quei valori che abbiamo spiegato più su
    • Minute – un valore da 0 a 59.
    • Hour – un valore da 0 a 23.
    • Day of the Month – un valore da 1 a 31.
    • Month – un valore da 1 a 12, o seleziona un mese dal menù a discesa.
    • Day of the Week – un valore da 0 a 6 (0 per Sunday), o seleziona un giorno dal menù a discesa.

    altro esempio: per programmare un comando che si attivi il 4,5,6 e 20 del mese si può utilizzare la notazione 4-6,20 (ossia dal 4 al 6 e il 20)

  8. Inseriamo il nostro comando (come precedentemente illustrato ma senza la notazione per la temporalità) nella riga Command
  9. Clicchiamo OK
  10. Clic su Preferences (Preferenze)
  11. Inseriamo un indirizzo email che servirà per ricevere i log delle operazioni.
  12. Clic su OK

Note finali

Ho avuto qualche difficoltà con alcune righe di comando per script in PHP. Ho notato differenze che non so se imputare alle versioni di PHP installate o alle configurazioni delle macchine (dovrei coinvolgere nel dibattito qualche amministratore di server).
Ad esempio su una macchina con PHP4 e Plesk 8.3.0 ho usato con successo la riga

/usr/local/bin/php -q /var/www/vhosts/dominio.com/httpdocs/script.php

La stessa macchina, dopo il passaggio a PHP5, ha ricominciato a funzionare solo con la riga

cd /var/www/vhosts/dominio.com/httpdocs/; php -q script.php

Ossia con una sintassi lievemente diversa ma che è risultata più digeribile dal nuovo interprete.

Fonti per questo articolo

Interspire – An introduction to cron
Cron
e Crontab su Wikipedia
Video Tutorial per settare un Crontab
Aplus.Net Knowledge Base Support

Sergio Gandrus: Da febbraio 2024 lavoro come CTO presso Deva Connection Il mio stack è PHP/MySQL/Git/Docker. Lavoro con Agile (Scrum) e utilizzo principalmente AWS come cloud provider. Sono papà e marito. Nel tempo libero mi piace leggere, il buon vino e viaggiare.

View Comments (3)

  • Ciao Sergio!

    Post molto interessante come sempre. Avrei una domanda alla quale spero saprai rispondermi. In una cartella ho un file "query.txt". Il file contiene varie query MySql una di seguito all'altra. Esempio di contenuto:

    TRUNCATE TABLE mele;
    INSERT INTO mele (id, colore) VALUES (6, 'rosso');
    INSERT INTO mele (id, colore) VALUES (34, 'giallo');TRUNCATE TABLE pippo;INSERT INTO pippo [........]

    Ciò che devo fare è semplice. Eseguire quelle query tutti i giorni a mezzanotte. Il contenuto del file "query.txt" viene aggiornato in automatico da un altro programma.

    Come posso impostare il crontab per eseguire query mysql contenute in un file? Qualche idea? Grazie 1000 in anticipo!

    • Devi far avviare tramite il Cron Job un file php che legga riga per riga il file txt eseguendo le varie query

  • The Product is good. Have a look at ownmyshop.com Ecommerce Software
    E-Commerce Software Grocery Store Online Store Builder Website