Se hai mai gestito un server Linux, lavorato nello sviluppo backend o configurato funzioni cloud automatizzate, probabilmente hai riscontrato una stringa simile a questa: 0 2 * * *. Per chi non lo sapesse, sembra un errore di battitura lasciato sulla tastiera. Per gli amministratori di sistema, è il cuore pulsante dell'automazione dell'infrastruttura moderna: un'espressione Cron.
Cron è il motore invisibile che gestisce Internet. Garantisce che il tuo database esegua il backup alle 3:00 del mattino, attiva le e-mail che ricevi ogni lunedì mattina e cancella i file temporanei del server prima che blocchino il sistema. Ma nonostante la sua potenza, la sintassi è notoriamente difficile da analizzare per gli esseri umani. In questa immersione profonda, demistificheremo gli asterischi e ti insegneremo come leggere e scrivere le pianificazioni cron come un esperto ingegnere DevOps.
Cos'è Cron e il Crontab?
Cron è un programmatore di lavoro basato sul tempo presente nei sistemi operativi per computer simili a Unix. Il nome "cron" deriva dalla parola greca che significa tempo, chronos. Gli utenti che configurano e gestiscono ambienti software utilizzano cron per pianificare i lavori (comandi o script di shell) da eseguire periodicamente a orari, date o intervalli fissi.
Il Crontab (Cron Table) è il file di configurazione in cui vengono archiviate queste pianificazioni. Quando modifichi il tuo crontab tramite il terminale, stai scrivendo un elenco di istruzioni che dicono al server esattamente cosa eseguire e quando.
Decostruire i 5 asterischi
Un'espressione cron standard è composta da 5 campi separati da spazi bianchi. Ogni campo rappresenta una specifica unità di tempo e vengono sempre letti da sinistra a destra in questo esatto ordine:
* * * * * command_to_execute
- - - - -
| | | | |
| | | | +----- Day of the Week (0 - 6) (Sunday=0 or 7)
| | | +------- Month (1 - 12)
| | +--------- Day of the Month (1 - 31)
| +----------- Hour (0 - 23)
+------------- Minute (0 - 59)
Un asterisco (*) significa "ogni valore possibile per questo campo". Quindi, l'espressione * * * * * si traduce letteralmente in: "Corri ogni minuto, di ogni ora, di ogni giorno, di ogni mese, di ogni giorno della settimana".
Modificatori di sintassi: passaggi, intervalli ed elenchi
Il potere di cron deriva dai suoi modificatori. Non sei limitato solo a numeri specifici o a "tutto".
1. Il modificatore del passo (/)
Se vuoi che uno script venga eseguito ogni 15 minuti, utilizza un passaggio. */15 * * * * significa "ogni minuto divisibile per 15". Funzionerà alle 0, 15, 30 e 45 dopo l'ora.
2. Il modificatore di intervallo (-)
Se desideri che uno script venga eseguito solo durante l'orario lavorativo, utilizza un intervallo. 0 9-17 * * * significa "corri al minuto zero, ogni ora dalle 9:00 alle 17:00".
3. Il modificatore di elenco (,)
Se vuoi che qualcosa venga eseguito in giorni specifici e non sequenziali, utilizza un elenco. 0 0 1,15 * * significa "eseguire a mezzanotte del 1 e del 15 del mese".
Smetti di indovinare le espressioni Cron
Non rischiare di eseguire uno script di backup ogni minuto anziché ogni mese. Un singolo errore di battitura può mandare in crash un server di produzione. Utilizza il nostro generatore visivo interattivo per creare e convalidare stringhe cron in modo sicuro.
Apri il generatore di lavori CronL'errore Cron più pericoloso
L'errore più comune e catastrofico commesso dagli sviluppatori è confondere il campo "Minuto". Esaminiamo uno scenario in cui desideri eseguire uno script di pulizia del database una volta ogni ora alle 2:00.
L'errore: * 2 * * *
Se scrivi quanto sopra, stai dicendo al server di eseguire lo script "Ogni minuto, durante la seconda ora del giorno". Il tuo pesante script di pulizia del database si attiverà 60 volte di seguito, probabilmente sovraccaricando la CPU, bloccando le tabelle del database e causando un'interruzione massiccia.
Il modo corretto: 0 2 * * *
Ciò dice esplicitamente al server di funzionare solo al "Minuto zero, della 2a ora". Verrà eseguito esattamente una volta alle 2:00.
Domande frequenti (FAQ)
Cron tiene conto dei fusi orari?
Per impostazione predefinita, cron valuta le espressioni in base all'ora di sistema locale del server su cui è in esecuzione. Se il tuo server è ospitato in una regione AWS a Londra, funziona con UTC/GMT. Devi tenere conto delle differenze di fuso orario se i tuoi utenti si trovano a New York o Tokyo.
Posso pianificare l'esecuzione di un processo cron ogni secondo?
No. Il cron Unix standard è limitato a una risoluzione di un minuto. Se hai bisogno di una pianificazione inferiore al minuto (ad esempio, ogni 10 secondi), devi utilizzare uno strumento demone separato o scrivere uno script che viene eseguito ogni minuto ma esegue il loop interno con i comandi di sospensione.
Cosa significano stringhe come @daily o @hourly?
Molte implementazioni moderne di cron supportano macro predefinite non standard per semplificare la pianificazione. @daily è esattamente uguale a 0 0 * * * (mezzanotte ogni giorno). @hourly è uguale a 0 * * * *. Sebbene utili, non sono universalmente supportati in tutti i sistemi legacy.