Conversione da espressione cron a temporizzatore systemd
Strumento gratuito che converte un'espressione cron — minuti, ore, giorno, mese e giorno della settimana — nella sintassi OnCalendar dei temporizzatori di systemd. Avverte quando l'indicazione congiunta di giorno e giorno della settimana produce una condizione di disgiunzione ed è comodo nelle migrazioni da cron negli ambienti a contenitori.
Corrispondenza fra i campi cron e i componenti di systemd
I cinque campi di un'espressione cron corrispondono così agli elementi della sintassi OnCalendar di systemd.
| Posizione | Campo cron | Elemento corrispondente in systemd |
|---|---|---|
| 1 | Minuti | I minuti della parte oraria (MM in HH:MM:SS) |
| 2 | Ore | Le ore della parte oraria (HH in HH:MM:SS) |
| 3 | Giorno del mese | Il giorno della parte di data (il giorno in anno-mese-giorno) |
| 4 | Mese | Il mese della parte di data (il mese in anno-mese-giorno) |
| 5 | Giorno della settimana | Il prefisso del giorno della settimana (per esempio Mon oppure Mon..Fri) |
Poiché cron non ha un campo per i secondi, in systemd essi valgono sempre «00». Inoltre, se tanto la data quanto il giorno della settimana restano illimitati con l'asterisco, la parte anno-mese-giorno di systemd si può omettere.
Corrispondenza fra i numeri dei giorni in cron e le sigle di systemd
Cron rappresenta il giorno della settimana con un numero da 0 a 7, mentre systemd usa le sigle inglesi.
| Numero del giorno in cron | Sigla del giorno in systemd |
|---|---|
| 0 (7) | Sun |
| 1 | Mon |
| 2 | Tue |
| 3 | Wed |
| 4 | Thu |
| 5 | Fri |
| 6 | Sat |
Esempi di conversione più comuni
| Espressione cron | OnCalendar= | Significato |
|---|---|---|
| * * * * * | OnCalendar=*-*-* *:*:00 | Viene eseguito ogni minuto, come l'espressione cron «* * * * *». |
| */15 * * * * | OnCalendar=*:00/15:00 | Viene eseguito ogni quindici minuti. |
| 0 9 * * 1-5 | OnCalendar=Mon..Fri 09:00:00 | Viene eseguito alle nove nei giorni feriali, dal lunedì al venerdì. |
| 0 0 1 * * | OnCalendar=*-*-01 00:00:00 | Viene eseguito il primo giorno di ogni mese a mezzanotte. |
| 0 0 1 1 * | OnCalendar=*-01-01 00:00:00 | Viene eseguito il primo gennaio di ogni anno a mezzanotte. |
| 0 0 1 * 1 | OnCalendar=Mon *-*-01 00:00:00 | Esempio con l'indicazione congiunta del giorno del mese, il primo, e del giorno della settimana, il lunedì. In cron vale la disgiunzione, cioè l'esecuzione avviene quando è soddisfatta anche una sola condizione, mentre in systemd vale la congiunzione, cioè soltanto nei giorni che le soddisfano entrambe: attenzione, perché la conversione risulta meno frequente dell'espressione originaria. |
Le espressioni cron che limitano a valori diversi dall'asterisco tanto il giorno del mese quanto il giorno della settimana non si convertono fedelmente nella sintassi OnCalendar, perché cron applica la disgiunzione e systemd la congiunzione. In questi casi valutate di suddividere il lavoro in due temporizzatori distinti.
Consigli
- Indicando a valori diversi dall'asterisco tanto il giorno del mese quanto il giorno della settimana, la disgiunzione di cron non è esprimibile fedelmente con la congiunzione di systemd. Leggete allora l'avviso nel risultato e, se occorre, suddividete il lavoro in due temporizzatori.
- Alcune immagini a contenitore minimali, come quelle basate su Alpine Linux, non comprendono affatto il demone cron: il passaggio ai temporizzatori di systemd diventa allora una valida alternativa.
- La riga OnCalendar generata si può verificare anche passandola al comando «systemd-analyze calendar», che ne controlla la sintassi e mostra la prossima esecuzione prevista.
- A differenza della singola riga di una tabella di pianificazione, un temporizzatore systemd si compone di due file: l'unità .timer e l'unità .service che contiene l'elaborazione vera e propria.
- Per le pianificazioni semplici, che non usano insieme giorno del mese e giorno della settimana — ogni ora, ogni giorno, ogni settimana — la conversione corrisponde sempre esattamente.
Domande frequenti
A proposito — da cron ai temporizzatori di systemd
Comparso intorno al 2010 come sistema di inizializzazione che governa l'avvio di Linux, systemd è diventato lo standard di molte distribuzioni. I suoi temporizzatori offrono, come cron, un meccanismo di esecuzione periodica, ma dispongono di funzioni che cron non aveva: la risoluzione delle dipendenze, la gestione unificata dei registri di esecuzione nel diario di sistema, la ripetizione in caso di insuccesso.
Negli ambienti a contenitori, d'altra parte, si moltiplicano le immagini di base che escludono deliberatamente il demone cron per contenere le dimensioni. Per eseguire lavori periodici in tali ambienti, la scelta realistica è affidarsi al meccanismo dell'orchestratore, come i lavori pianificati di Kubernetes, oppure, se l'ospite si fonda su systemd, ai suoi temporizzatori.
La sintassi OnCalendar è più espressiva dei cinque campi di cron e ammette indicazioni annuali e precisione al secondo, ma proprio per questa differenza alcune espressioni cron — quelle che limitano insieme giorno del mese e giorno della settimana in disgiunzione — cambiano significato con una conversione ingenua. Lo strumento avverte esplicitamente di questo punto per far scoprire per tempo un'insidia difficile da notare durante una migrazione.