Cronjob: un prezioso alleato per l’esecuzione automatica dei processi
Un cronjob è allo stesso tempo sia un “demone” che un dio. Almeno se parliamo del significato 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 (conosciuto 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 background in un sistema operativo e può eseguire automaticamente dei processi (jobs) in momenti specifici e predeterminati. Il cronjob nasce quindi dall’unione tra un cron system e un processo predefinito (job).
In questo articolo sveliamo cosa si nasconde esattamente dietro questi compiti automatizzati e ricorrenti, particolarmente esigenti in termini di uso delle risorse, spiegandovi nel dettaglio il funzionamento di questa tecnologia.
Cos’è un cronjob?
Un cronjob è un processo che viene eseguito automaticamente all’interno di un sistema operativo, lanciando regolarmente comandi per la loro esecuzione. Solitamente vengono eseguiti assieme molteplici processi complessi. Il grande vantaggio di un cronjob è la possibilità di essere fortemente personalizzato.
Ogni cronjob è formato da tre componenti:
- lo script che deve essere eseguito;
- il comando che esegue lo script regolarmente;
- l’azione o comando dello script.
Nella pratica, i cronjob sono utilizzati ad esempio per svolgere i compiti ricorrenti di un server. Anche l’invio di newsletter, i sondaggi statistici e la pulizia del database sono avviati automaticamente tramite cronjob.
I cronjob possono essere utilizzati da tutti i sistemi operativi che dispongono di un sistema cron o di un demone cron. Questo include tutti i sistemi Unix e BSD (Berkeley Software Distribution), come macOS e Linux.
I sistemi operativi possono eseguire i cronjob a intervalli di tempo precedentemente definiti, come suggerito dalla stessa dicitura “command run on notice” (comando eseguito su notifica). Questo permette di eseguire i processi di routine in modo completamente indipendente. Oltre a un sistema operativo dotato di demone cron, per impostare un cronjob devono essere soddisfatti i seguenti requisiti:
- Un server dedicato
- una Secure Shell (SSH) o un client Telnet per l’accesso
- Un client FTP per il trasferimento e l’upload dei file cron.
Esistono interfacce apposite che consentono di configurare i cronjob in modo semplice, oltre che pacchetti di web hosting che forniscono cronjob preconfigurati per siti web. Per quanto riguarda l’hosting con cronjob, vi consigliamo di dare un’occhiata al nostro articolo di aiuto sui cronjob.
Quali compiti svolge un cronjob?
I cronjob vengono più comunemente utilizzati per il backup dei dati. Per esempio, sono la soluzione perfetta per chiunque voglia creare un backup con tar per archiviare dati. Tra gli altri usi tipici di cronjob ci sono anche la pulizia dei database e l’elaborazione delle statistiche sull’analisi del traffico dei siti web.
In combinazione con un Content Management System, un cronjob può anche inviare automaticamente newsletter o controllare l’inventario dei negozi online, oltre che monitorare il carico di un server e caricare automaticamente nuove informazioni nella descrizione di un prodotto, come la valutazione media degli utenti.
I processi automatizzati che un cronjob può svolgere sono davvero numerosi, ma devono essere utilizzati con attenzione, in quanto richiedono una grande quantità di risorse. Pertanto, prima di implementare un cronjob è importante valutare se questo ha davvero senso e quando dovrebbe essere eseguito. Uno script PHP adeguato consente di controllare che il cronjob venga eseguito solo quando non interferisce con altri processi.
Una panoramica dei compiti più importanti svolti da un cronjob:
- Pulizia dei database: rimuove i dati obsoleti, compresi i commenti e i dati di login non più attuali.
- Creazione di statistiche: un cronjob può, ad esempio, aggiornare giornalmente i dati sulle pagine visualizzate di un sito.
- Aggiornamento di un feed RSS: un cronjob permette di rigenerare regolarmente il file XML.
- Pianificazione e pubblicazione di nuovi contenuti
- Invio di newsletter: è possibile programmare l’invio delle e-mail.
- Creazione di fatture: le fatture possono essere create e inviate in modo indipendente, in blocco o a intervalli di tempo fissi.
- Backup dei database: si applica principalmente ai database più piccoli, di dimensioni inferiori ai 20 MB.
- Machine learning: un cronjob permette di dotare le intelligenze artificiali di nuovi set di dati in momenti specifici.
- Aggiornamenti: è possibile pianificare gli aggiornamenti software per svolgerli in momenti specifici.
Com’è fatto un comando cronjob standard?
Le vaste possibilità di personalizzazione sono il grande vantaggio di un cronjob. Per personalizzare un cronjob esiste un set di base di tre variabili che possono essere eseguite in qualsiasi momento:
- PATH: mostra il percorso in cui si cercano i comandi o uno script;
- SHELL: ordina all’interprete dei comandi di eseguire uno script;
- MAILTO: mostra gli utenti con cui condividere i risultati del cronjob; si tratta per impostazione predefinita 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.
Trovate maggiori informazioni sui comandi per Linux e simili nel nostro articolo sui comandi di Linux.
Come funziona un cronjob?
Per permettere a un cronjob di eseguire il suo lavoro, il comando deve essere assegnato in anticipo. Il demone cron lavora quindi in background ed esegue lavori non interattivi. In Windows questa funzione è conosciuta come “Servizi”.
I cronjob rimangono fondamentalmente inattivi fino all’arrivo del loro comando, che può avvenire direttamente 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 è necessario eseguire e in quale momento.
I cron job sono definiti e configurati in una tabella chiamata crontab, nella quale vengono elencati i comandi da eseguire e i momenti in cui devono essere eseguiti.
Il programma con il quale si possono modificare i singoli crontab si chiama anche “crontab”.
Il file crontab di sistema predefinito “crontab” si trova nella directory crontab /etc/cron.*/.
- Certificato SSL e protezione DDoS
- Velocità, flessibilità e scalabilità
- Dominio e consulente personale
- 1 anno gratis del gestionale di fatturazione elettronica FlexTax
Quattro brevi esempi di cronjob
Il programma crontab può essere usato per modificare i crontab. Il comando necessario 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 rispettivo 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 informazioni sui periodi di tempo esatti.
Per fornire informazioni più precise sui periodi di tempo, occorre sostituire 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 impostazioni 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 (intervallo 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: riprodurre un suono ogni 30 minuti
Un cronjob può anche essere usato per riprodurre un suono a intervalli regolari:
*/30 * * * * /usr/bin/play_sound.sh
Esempio 3: e-mail di promemoria
È possibile inviare e-mail di promemoria 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 festeggiare tutti insieme il 30 luglio, ovvero la Giornata dell’amministratore di sistema:
0 0 30 07 * (echo "Grazie a tutti gli amministratori di sistema" | mail -s "Buon Sysadmin Day a tutti!" user@domain.xy)