Conversione da temporizzatore systemd a espressione cron

Strumento gratuito che converte la sintassi OnCalendar dei temporizzatori di systemd in un'espressione cron — minuti, ore, giorno, mese e giorno della settimana. È l'inverso dello strumento affine che converte da cron a systemd, prevede le abbreviazioni nominali come daily e weekly e avverte della diversa semantica quando si indicano insieme giorno e giorno della settimana.

Corrispondenza fra i componenti di systemd e i campi cron

Ciascuna parte della sintassi OnCalendar di systemd corrisponde così ai cinque campi di un'espressione cron.

Posizione Elemento corrispondente in systemd Campo cron
1 I minuti della parte oraria (MM in HH:MM:SS) Minuti
2 Le ore della parte oraria (HH in HH:MM:SS) Ore
3 Il giorno della parte di data (il giorno in anno-mese-giorno) Giorno del mese
4 Il mese della parte di data (il mese in anno-mese-giorno) Mese
5 Il prefisso del giorno della settimana (per esempio Mon oppure Mon..Fri) Giorno della settimana

L'indicazione dei secondi in systemd, cioè SS in HH:MM:SS, non ha un campo corrispondente in cron e viene ignorata nella conversione; se il valore è diverso da «00» compare un avviso.

Corrispondenza fra le sigle di systemd e i numeri dei giorni in cron

Systemd usa le sigle inglesi dei giorni della settimana, mentre cron li rappresenta con un numero da 0 a 6.

Sigla del giorno in systemd Numero del giorno in cron
Sun 0
Mon 1
Tue 2
Wed 3
Thu 4
Fri 5
Sat 6

Corrispondenza fra le abbreviazioni nominali di systemd e le espressioni cron

Systemd dispone di notazioni particolari dal nome leggibile, come «daily» e «weekly», e anche queste si convertono in espressioni cron con questo strumento.

OnCalendar= Espressione cron
minutely * * * * *
hourly 0 * * * *
daily / midnight 0 0 * * *
weekly 0 0 * * 1
monthly 0 0 1 * *
yearly / annually 0 0 1 1 *

Esempi di conversione più comuni

OnCalendar= Espressione cron Significato
*-*-* *:*:00 * * * * * Viene eseguito ogni minuto, come l'espressione cron «* * * * *».
*:00/15:00 */15 * * * * Viene eseguito ogni quindici minuti.
Mon..Fri 09:00:00 0 9 * * 1-5 Viene eseguito alle nove nei giorni feriali, dal lunedì al venerdì.
*-*-01 00:00:00 0 0 1 * * Viene eseguito il primo giorno di ogni mese a mezzanotte.
*-01-01 00:00:00 0 0 1 1 * Viene eseguito il primo gennaio di ogni anno a mezzanotte.
Mon *-*-01 00:00:00 0 0 1 * 1 Esempio con l'indicazione congiunta del giorno del mese, il primo, e del giorno della settimana, il lunedì. In systemd vale la congiunzione, cioè soltanto i giorni che soddisfano entrambe le condizioni, mentre in cron l'espressione è interpretata come disgiunzione: attenzione, perché la conversione risulta più frequente dell'espressione originaria.

Le espressioni OnCalendar che limitano a valori diversi dall'asterisco tanto il giorno del mese quanto il giorno della settimana non si convertono fedelmente in cron, perché systemd applica la congiunzione e cron la disgiunzione. In questi casi verificate sempre il significato del risultato.

Consigli

  • Potete inserire anche le abbreviazioni nominali come «daily», «weekly» e «monthly»: sono convertite internamente nell'espressione cron corrispondente, per esempio «0 0 * * *» per la prima.
  • Indicando a valori diversi dall'asterisco tanto il giorno del mese quanto il giorno della settimana, la conversione dalla congiunzione di systemd alla disgiunzione di cron ne muta il significato. Leggete l'avviso e accertatevi che il risultato corrisponda alle vostre intenzioni.
  • L'indicazione dell'anno e quella dei secondi non esistono in cron e sono ignorate nella conversione; un avviso ve ne informa.
  • Lo strumento torna utile quando si vuole tornare alla notazione cron a partire da un temporizzatore systemd, per esempio migrando ai lavori pianificati di Kubernetes.
  • 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

Quando si migra verso contenitori leggeri privi di systemd, quando si vuole riprodurre la stessa esecuzione periodica con i lavori pianificati di Kubernetes, che adottano la notazione cron, oppure quando gli strumenti operativi della propria squadra prevedono soltanto configurazioni in formato cron.

Sì. Inserendo direttamente le abbreviazioni nominali di systemd — «minutely», «hourly», «daily», «weekly», «monthly», «yearly» — si ottiene l'espressione cron corrispondente.

Nella sintassi OnCalendar giorno della settimana e data sono sempre in congiunzione e devono coincidere entrambi, mentre la specifica di Vixie cron, quando entrambi sono limitati a valori diversi dall'asterisco, applica la disgiunzione: basta che una sola condizione sia soddisfatta. Rilevando questo caso, lo strumento mostra un avviso e segnala che il risultato può risultare più ampio, cioè più frequente, dell'espressione originaria.

L'espressione cron non ha un campo per l'anno, perciò un'indicazione diversa dall'asterisco viene ignorata nella conversione. Lo strumento mostra allora un avviso e segnala che il risultato verrà eseguito ogni anno, indipendentemente dall'anno indicato.

Sono coperti i principali schemi prodotti dallo strumento di conversione inverso — ogni minuto, ogni ora, ogni giorno, ogni settimana, ogni mese, ogni anno, passi, intervalli, elenchi, giorni della settimana e abbreviazioni nominali — ma poiché la sintassi OnCalendar è più espressiva di cron, le indicazioni molto complesse, come più anni o ripetizioni al secondo, non sono esprimibili in cron e la conversione può fallire.
Tool-kun

A proposito — che cosa significa «tornare» dai temporizzatori di systemd a cron

Le migrazioni tecnologiche si raccontano di solito in una sola direzione, dal vecchio al nuovo, ma nella pratica non sono rare le occasioni in cui occorre il percorso inverso. Spostando un carico di lavoro da un ospite che adotta i temporizzatori di systemd verso contenitori leggeri che prevedono soltanto cron, oppure verso strumenti di orchestrazione che ne adottano la notazione, come i lavori pianificati di Kubernetes, si rende necessario riportare la sintassi OnCalendar a un'espressione cron.

Questa conversione inversa non è una corrispondenza biunivoca, perché la sintassi OnCalendar è più espressiva di cron. Comprende concetti che i cinque campi non riescono a rendere: l'indicazione dell'anno, la precisione al secondo, la combinazione congiuntiva di data e giorno della settimana. Lo strumento si propone perciò di convertire con esattezza gli schemi di uso comune e tratta come errore le indicazioni troppo complesse.

La differenza di semantica quando si indicano insieme giorno e giorno della settimana — congiunzione in systemd, disgiunzione in cron — è l'insidia maggiore di questa conversione. La condizione «il primo del mese» e «di lunedì» restringe in systemd l'esecuzione ai soli primi del mese che cadono di lunedì, mentre in cron l'esecuzione avviene sia i primi del mese sia tutti i lunedì. Lo strumento avverte esplicitamente di questo punto per far notare un mutamento di significato che nelle migrazioni sfugge facilmente.