Eseguire script e programmi a intervalli di tempo regolari con Cron (Managed Cloud Hosting)

In questo articolo ti mostriamo come eseguire script e programmi a intervalli di tempo regolari tramite Cron.

Il demone cron è un servizio che consente di eseguire script e programmi con pianificazione temporale. I comandi da eseguire vengono memorizzati in una tabella. Questa tabella prende il nome di crontab. In questo articolo ti spieghiamo come accedere alla tabella crontab tramite SSH e come eseguire script e programmi con pianificazione temporale.

Per utilizzare Cron, devi stabilire una connessione SSH con il tuo progetto. Immetti quindi il comando crontab -e per aprire il file crontab.

Nota bene:

Il file crontab si trova nella directory /var/spool/cron.

Editare il file crontab con vi

Per impostazione predefinita, quando si accede a crontab -e viene richiamato anche l'editor vi.

Nota bene:

Per modificare il file crontab con l'editor Nano, immetti in alternativa il comando EDITOR=nano crontab -e.

L'editor vi dispone di una modalità di inserimento e di una modalità di comando. La modalità di inserimento può essere richiamata premendo il tasto i. In questa modalità, i caratteri immessi vengono subiti inseriti nel testo. Per accedere alla modalità di comando, premi il tasto ESC. Quando si utilizza la modalità di comando, i tasti premuti vengono interpretati come un comando.

Nota bene:

Vi non può essere terminato in modalità di inserimento. Pertanto per terminare vi accedi sempre alla modalità di comando.

Di seguito vengono elencati i comandi più importanti:

Comando Descrizione
dd Elimina riga attuale
u Annulla ultima modifica
J Raggruppa righe
o Inserisci una nuova riga sotto quella attuale
P Inserisci i dati copiati nella posizione del cursore
:q! Chiudi l'editor senza salvare le modifiche.
:wq Salva il testo e chiudi l'editor

Struttura del file crontab e sintassi della crontab

Tutti i comandi che devono essere eseguiti da Cron vengono memorizzati in una tabella. Questa tabella prende il nome di crontab ed è formata dalle seguenti colonne:

Minuti (0-59) Ore (0-23, 0 = mezzanotte) Giorni (1-31) Mese (1 - 12) Giorno della settimana (0-6, 0 = domenica) Comando o percorso della directory e nome dello script
* * * * * ad es. /var/www/directory/myscript.sh

Le prime 5 colonne di questa tabella includono indicazioni di carattere temporale. I dati inseriti all'interno di queste colonne non possono contenere spazi. La sesta colonna contiene il rispettivo comando o il percorso della directory e il nome dello script desiderato. Le singole colonne sono separate da spazi.

Nota bene:

Quando immetti un comando, assicurati sempre che sia specificato il percorso completo. Inoltre, dopo aver immesso il comando è necessario inserire sempre un'interruzione di riga forzata (ad es. con '\n').

Nel seguente esempio il backup della directory /var/www/html/sites verrà eseguito alle ore 04:01 del 1° gennaio e di ogni lunedì del mese di gennaio:

01 04 1 1 1 cp -a /var/www/html/sites /var/www/html/backups

In questo caso, il backup viene salvato nella directory /var/www/html/backups.

Per eseguire il backup della directory /var/www/html/sites ogni giorno alle ore 04.01, immetti il seguente comando:

01 04 * * * cp -a /var/www/html/sites /var/www/html/backups

Se il backup della directory deve essere eseguito ogni 10 minuti, immetti il seguente comando:

*/10 * * * * cp -a /var/www/html/sites /var/www/html/backups

Per eseguire il comando alle ore 08.00, 09.00 e 10.00, immetti il comando nel seguente formato:

* 8-10 * * * cp -a /var/www/html/sites /var/www/html/backups

Nota bene:

In alternativa puoi immettere questo valore temporale anche nel seguente formato: 8,9,10.

Per eseguire il backup della directory /var/www/html/sites nei mesi di gennaio e giugno alle ore 04:01, 04:31, 05:01 e 05:31 ogni giorno tra il 1° e il 15° giorno del rispettivo mese, immetti il seguente comando:
01,31 04,05 1-15 1,6 * cp -a /var/www/html/sites /var/www/html/backups

Stringhe predefinite per la determinazione dei valori temporali

In alternativa puoi utilizzare stringhe predefinite per determinare un valore temporale per un cron job. Queste stringhe vengono elencate di seguito:

Stringa Significato Sostituisce il valore seguente nella crontab
@reboot una volta, all'avvio del sistema  
@yearly una volta l'anno 0 0 1 1 *
@annually una volta l'anno 0 0 1 1 *
@monthly una volta al mese 0 0 1 * *
@weekly una volta a settimana 0 0 * * 0
@daily una volta al giorno 0 0 * * *
@midnight una volta al giorno 0 0 * * * * * * * *
@hourly una volta all'ora 0 * * * *

Esecuzione di script con Cron

Per combinare l'esecuzione di più comandi o programmi, puoi creare uno script. Puoi quindi eseguire lo script con pianificazione temporale tramite Cron. Di seguito viene descritta a titolo esemplificativo la creazione di uno script e di una voce di crontab:

  • Apri l'editor.

  • Immetti lo script desiderato nel seguente formato:

    #!/bin/bash
    cp -a /var/www/html/sites /var/www/html/backups
    cp -a /var/www/html/index.php /var/www/html/backups

  • Salva lo script nella directory /var/www/html/cronscripts. Fornisci al file un nome appropriato.

  • Affinché lo script possa essere eseguito senza specificare l'interprete, immetti il seguente comando:

    chmod +x /var/www/html/cronscripts/backup.sh

  • Immetti il comando crontab -e.

  • Inserisci un valore nella tabella crontab.

    01 04 * * * /var/www/html/cronscripts/backup.sh

  • Per accedere alla modalità di comando, premi il tasto ESC.

  • Immetti il comando :wq per salvare le modifiche apportate.

Visualizzare l'elenco dei cron job creati

Con il seguente comando puoi visualizzare l'elenco dei cron job creati:
crontab -l

File di log

Tutte le azioni eseguite da Cron vengono protocollate nel file $CRON_LOG_FILE. Nella maggior parte dei casi, questo file si trova nella directory /var/spool/cron.

Notifiche

Con la variabile MAILTO puoi essere informato tramite e-mail nel caso in cui si verifichi un errore nell'elaborazione di un cron job. Questa variabile è riportata nella tabella crontab. Inserendo un indirizzo e-mail, il destinatario verrà informato di tutte le azioni eseguite da Cron.