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 | 0 0 * * * |
| weekly | 0 0 * * 1 |
| monthly | 0 0 1 * * |
| quarterly | 0 0 1 1,4,7,10 * |
| semiannually | 0 0 1 1,7 * |
| 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.
Riportare un timer di systemd a un'espressione cron
Questo strumento riporta l'OnCalendar= di un timer di systemd a un'espressione cron fatta di minuto, ora, giorno del mese, mese e giorno della settimana. Sono considerate anche le abbreviazioni con nome, come daily e weekly. È l'inverso del suo strumento gemello.
Ciò che in questo verso merita attenzione è che parte di quanto systemd sa esprimere non ha equivalente in cron. OnCalendar= ammette una precisione al secondo, un anno e giorni contati dalla fine del mese come *-02~03 (il terzultimo giorno di febbraio), e nulla di ciò entra nei cinque campi di cron. Un intervallo di date come *-*-01..07 si converte invece direttamente, perché cron lo scrive come 1-7. Né cron ha contropartita alcuna per Persistent=, che recupera le esecuzioni mancate mentre il sistema era spento. L'altro punto è la semantica di giorno del mese e giorno della settimana: systemd li tratta come una congiunzione, mentre cron li legge come una disgiunzione. Un travaso diretto sposta dunque la pianificazione verso un'esecuzione più frequente, e lo strumento ve ne avverte là dove ciò si applichi.
Come convertire
-
Inserite il valore di OnCalendar=
Va bene una forma come
Mon *-*-* 06:00:00, così come un nome qualedaily. - Rivedete l'espressione cron generata Vi viene consegnato l'esito riportato sui cinque campi.
- Leggete gli avvertimenti Vengono segnalate tanto le indicazioni che cron non sa esprimere quanto le differenze di semantica.
- Trascrivetela in una crontab Aggiungete poi il comando da eseguire e la riga è pronta per essere registrata.
Consigli per sfruttarlo al meglio
- 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.
Quando torna utile
Nel passare a un ambiente privo di systemd
I contenitori e i sistemi di tipo UNIX più vecchi talvolta non offrono altro che cron.
Nel decifrare un timer esistente
Anche senza dimestichezza con la sintassi di OnCalendar=, portarla a espressione cron rende chiara la frequenza.
Nel tenere la stessa pianificazione in due ambienti
Là dove la produzione gira su systemd e lo sviluppo su cron, le due configurazioni si possono raffrontare.
Nel fare l'inventario delle vostre pianificazioni
Convertirle tutte insieme vi dà l'occasione di accertare che gli intervalli siano quelli voluti.
Termini dei pianificatori
- OnCalendar=
- La chiave che indica l'ora in un timer di systemd. Giorno della settimana, data e ora stanno in una sola riga.
- Espressione cron
- La sintassi che esprime un'ora con cinque campi: minuto, ora, giorno del mese, mese e giorno della settimana. Non sa indicare i secondi.
- Abbreviazione con nome
- Un alias dato a un intervallo consueto, come
daily,weeklyomonthly. - Differenza di semantica
- Quando giorno del mese e giorno della settimana sono dati insieme, systemd li legge come congiunzione e cron come disgiunzione.
- Persistent=
- L'impostazione che recupera le esecuzioni mancate mentre il sistema era spento. Cron non ne ha contropartita diretta.
- Crontab
- Il file in cui si scrive la pianificazione di cron, o il comando che lo modifica.
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.