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
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.