Un cronjob è allo stesso tempo sia un “demone” che un dio. Almeno se parliamo del si­gni­fi­ca­to del nome in senso stretto. Cron significa “command run on notice” (ovvero: “comando eseguito su notifica”), ma il nome allude anche a Crono, il dio greco del tempo. Nei sistemi operativi come Linux o macOS il comando viene eseguito come cron daemon (co­no­sciu­to anche come cron system).

L’allusione al dio greco del tempo è utile tra l’altro a ricordare il senso e lo scopo dei cronjob. Il cron system, infatti, funziona in back­ground in un sistema operativo e può eseguire au­to­ma­ti­ca­men­te dei processi (jobs) in momenti specifici e pre­de­ter­mi­na­ti. Il cronjob nasce quindi dall’unione tra un cron system e un processo pre­de­fi­ni­to (job).

In questo articolo sveliamo cosa si nasconde esat­ta­men­te dietro questi compiti au­to­ma­tiz­za­ti e ri­cor­ren­ti, par­ti­co­lar­men­te esigenti in termini di uso delle risorse, spie­gan­do­vi nel dettaglio il fun­zio­na­men­to di questa tec­no­lo­gia.

Cos’è un cronjob?

Un cronjob è un processo che viene eseguito au­to­ma­ti­ca­men­te all’interno di un sistema operativo, lanciando re­go­lar­men­te comandi per la loro ese­cu­zio­ne. So­li­ta­men­te vengono eseguiti assieme mol­te­pli­ci processi complessi. Il grande vantaggio di un cronjob è la pos­si­bi­li­tà di essere for­te­men­te per­so­na­liz­za­to.

Ogni cronjob è formato da tre com­po­nen­ti:

  • lo script che deve essere eseguito;
  • il comando che esegue lo script re­go­lar­men­te;
  • l’azione o comando dello script.

Nella pratica, i cronjob sono uti­liz­za­ti ad esempio per svolgere i compiti ri­cor­ren­ti di un server. Anche l’invio di new­slet­ter, i sondaggi sta­ti­sti­ci e la pulizia del database sono avviati au­to­ma­ti­ca­men­te tramite cronjob.

I cronjob possono essere uti­liz­za­ti da tutti i sistemi operativi che di­spon­go­no di un sistema cron o di un demone cron. Questo include tutti i sistemi Unix e BSD (Berkeley Software Di­stri­bu­tion), come macOS e Linux.

I sistemi operativi possono eseguire i cronjob a in­ter­val­li di tempo pre­ce­den­te­men­te definiti, come suggerito dalla stessa dicitura “command run on notice” (comando eseguito su notifica). Questo permette di eseguire i processi di routine in modo com­ple­ta­men­te in­di­pen­den­te. Oltre a un sistema operativo dotato di demone cron, per impostare un cronjob devono essere sod­di­sfat­ti i seguenti requisiti:

N.B.

Esistono in­ter­fac­ce apposite che con­sen­to­no di con­fi­gu­ra­re i cronjob in modo semplice, oltre che pacchetti di web hosting che for­ni­sco­no cronjob pre­con­fi­gu­ra­ti per siti web. Per quanto riguarda l’hosting con cronjob, vi con­si­glia­mo di dare un’occhiata al nostro articolo di aiuto sui cronjob.

Quali compiti svolge un cronjob?

I cronjob vengono più co­mu­ne­men­te uti­liz­za­ti per il backup dei dati. Per esempio, sono la soluzione perfetta per chiunque voglia creare un backup con tar per ar­chi­via­re dati. Tra gli altri usi tipici di cronjob ci sono anche la pulizia dei database e l’ela­bo­ra­zio­ne delle sta­ti­sti­che sull’analisi del traffico dei siti web.

In com­bi­na­zio­ne con un Content Ma­na­ge­ment System, un cronjob può anche inviare au­to­ma­ti­ca­men­te new­slet­ter o con­trol­la­re l’in­ven­ta­rio dei negozi online, oltre che mo­ni­to­ra­re il carico di un server e caricare au­to­ma­ti­ca­men­te nuove in­for­ma­zio­ni nella de­scri­zio­ne di un prodotto, come la va­lu­ta­zio­ne media degli utenti.

N.B.

I processi au­to­ma­tiz­za­ti che un cronjob può svolgere sono davvero numerosi, ma devono essere uti­liz­za­ti con at­ten­zio­ne, in quanto ri­chie­do­no una grande quantità di risorse. Pertanto, prima di im­ple­men­ta­re un cronjob è im­por­tan­te valutare se questo ha davvero senso e quando dovrebbe essere eseguito. Uno script PHP adeguato consente di con­trol­la­re che il cronjob venga eseguito solo quando non in­ter­fe­ri­sce con altri processi.

Una pa­no­ra­mi­ca dei compiti più im­por­tan­ti svolti da un cronjob:

  • Pulizia dei database: rimuove i dati obsoleti, compresi i commenti e i dati di login non più attuali.
  • Creazione di sta­ti­sti­che: un cronjob può, ad esempio, ag­gior­na­re gior­nal­men­te i dati sulle pagine vi­sua­liz­za­te di un sito.
  • Ag­gior­na­men­to di un feed RSS: un cronjob permette di ri­ge­ne­ra­re re­go­lar­men­te il file XML.
  • Pia­ni­fi­ca­zio­ne e pub­bli­ca­zio­ne di nuovi contenuti
  • Invio di new­slet­ter: è possibile pro­gram­ma­re l’invio delle e-mail.
  • Creazione di fatture: le fatture possono essere create e inviate in modo in­di­pen­den­te, in blocco o a in­ter­val­li di tempo fissi.
  • Backup dei database: si applica prin­ci­pal­men­te ai database più piccoli, di di­men­sio­ni inferiori ai 20 MB.
  • Machine learning: un cronjob permette di dotare le in­tel­li­gen­ze ar­ti­fi­cia­li di nuovi set di dati in momenti specifici.
  • Ag­gior­na­men­ti: è possibile pia­ni­fi­ca­re gli ag­gior­na­men­ti software per svolgerli in momenti specifici.

Com’è fatto un comando cronjob standard?

Le vaste pos­si­bi­li­tà di per­so­na­liz­za­zio­ne sono il grande vantaggio di un cronjob. Per per­so­na­liz­za­re un cronjob esiste un set di base di tre variabili che possono essere eseguite in qualsiasi momento:

  1. PATH: mostra il percorso in cui si cercano i comandi o uno script;
  2. SHELL: ordina all’in­ter­pre­te dei comandi di eseguire uno script;
  3. MAILTO: mostra gli utenti con cui con­di­vi­de­re i risultati del cronjob; si tratta per im­po­sta­zio­ne pre­de­fi­ni­ta dell’abbonato.

Gli utenti possono definire da soli i cronjob con queste tre variabili o con qualsiasi altro numero di variabili. Di solito per i comandi si usano script SHELL, PHP e PERL.

Consiglio

Trovate maggiori in­for­ma­zio­ni sui comandi per Linux e simili nel nostro articolo sui comandi di Linux.

Come funziona un cronjob?

Per per­met­te­re a un cronjob di eseguire il suo lavoro, il comando deve essere assegnato in anticipo. Il demone cron lavora quindi in back­ground ed esegue lavori non in­te­rat­ti­vi. In Windows questa funzione è co­no­sciu­ta come “Servizi”.

I cronjob rimangono fon­da­men­tal­men­te inattivi fino all’arrivo del loro comando, che può avvenire di­ret­ta­men­te nel sistema operativo o da un altro computer in rete. Il comando è dato tramite un file cron (un semplice file di testo) che specifica quale processo è ne­ces­sa­rio eseguire e in quale momento.

I cron job sono definiti e con­fi­gu­ra­ti in una tabella chiamata crontab, nella quale vengono elencati i comandi da eseguire e i momenti in cui devono essere eseguiti.

N.B.

Il programma con il quale si possono mo­di­fi­ca­re i singoli crontab si chiama anche “crontab”.

Il file crontab di sistema pre­de­fi­ni­to “crontab” si trova nella directory crontab /etc/cron.*/.

Web Hosting
Diventa il n°1 della rete con il provider di hosting n°1 in Europa
  • Di­spo­ni­bi­li­tà garantita al 99,99%
  • Dominio, SSL ed e-mail inclusi
  • As­si­sten­za 24/7 in lingua italiana

Quattro brevi esempi di cronjob

Il programma crontab può essere usato per mo­di­fi­ca­re i crontab. Il comando ne­ces­sa­rio per farlo è:

crontab -e

La sintassi è piuttosto chiara. Ogni cronjob ha il seguente formato:

*     *     *     *     * Comando da eseguire
-      -      -      -     -
|     |     |     |     |
|     |     |     |     +----- Giorno della settimana (0 - 7) (la domenica corrisponde sia a 0 che a 7)
|     |     |     +------- Mese (1 - 12)
|     |     +--------- Giorno (1 - 31)
|     +----------- Ora (0 - 23)
+------------- Minuti (0 - 59)

L’asterisco * indica che un cronjob deve sempre avvenire nel ri­spet­ti­vo giorno, mese, ora o minuto. Per i giorni della settimana e i mesi, si possono usare le prime tre lettere del nome inglese, ad esempio sun per domenica. Questa forma di notazione non consente però di fornire in­for­ma­zio­ni sui periodi di tempo esatti.

Per fornire in­for­ma­zio­ni più precise sui periodi di tempo, occorre so­sti­tui­re l’asterisco con delle cifre. Se la prima cifra è ad esempio 8-10, il comando viene eseguito all’8°, 9° e 10° minuto. Se invece si imposta */2, il comando viene eseguito ogni secondo minuto. Le im­po­sta­zio­ni possono essere combinate fra di loro. Per le prime cinque cifre è quindi possibile immettere un totale di tre valori temporali:

  • * = eseguire sempre (per ogni specifica)
  • */n = eseguire ogni n (in­ter­val­lo di tempo)
  • n,x,y = eseguire a n,x,y

Esempio 1: eseguire un cronjob come backup

Per eseguire un backup ogni mattina alle 6, avete bisogno del seguente comando:

0 6 * * * /usr/bin/backup.sh

Esempio 2: ri­pro­dur­re un suono ogni 30 minuti

Un cronjob può anche essere usato per ri­pro­dur­re un suono a in­ter­val­li regolari:

*/30 * * * * /usr/bin/play_sound.sh

Esempio 3: e-mail di pro­me­mo­ria

È possibile inviare e-mail di pro­me­mo­ria alle 8 e alle 18 tramite il seguente cronjob:

0 8,18 * * * /usr/bin/send_reminder_mail.sh

Esempio 4: Grazie, admin!

Oppure potete usare un cronjob per fe­steg­gia­re tutti insieme il 30 luglio, ovvero la Giornata dell’am­mi­ni­stra­to­re di sistema:

0 0 30 07 * (echo "Grazie a tutti gli amministratori di sistema" | mail -s "Buon Sysadmin Day a tutti!" user@domain.xy)
Vai al menu prin­ci­pa­le