Convertisseur de minuteur systemd vers expression Cron

Convertissez gratuitement la syntaxe OnCalendar= d'un minuteur systemd en expression cron (minute heure jour mois jour de la semaine). L'inverse de notre convertisseur "Cron vers minuteur systemd". Prend en charge les raccourcis nommés (daily, weekly, etc.) et avertit des différences sémantiques lorsque le jour du mois et le jour de la semaine sont spécifiés en même temps.

Correspondance entre composants systemd et champs cron

Chaque partie de la syntaxe OnCalendar= de systemd correspond à l'un des cinq champs de cron comme suit.

Position Emplacement dans systemd Champ cron
1 Minute dans la partie horaire (MM dans HH:MM:SS) Minute
2 Heure dans la partie horaire (HH dans HH:MM:SS) Heure
3 Jour dans la partie date (jour dans année-mois-jour) Jour du mois
4 Mois dans la partie date (mois dans année-mois-jour) Mois
5 Préfixe de jour de la semaine (ex. Mon, Mon..Fri) Jour de la semaine

Le champ des secondes de systemd (SS dans HH:MM:SS) n'a pas d'équivalent cron et est donc ignoré lors de la conversion (un avertissement apparaît si les secondes ne sont pas "00").

Correspondance entre abréviations de jour systemd et numéros de jour de la semaine cron

systemd utilise des abréviations anglaises pour les jours de la semaine, tandis que cron utilise des nombres de 0 à 6.

Abréviation de jour systemd Numéro de jour de la semaine cron
Sun 0
Mon 1
Tue 2
Wed 3
Thu 4
Fri 5
Sat 6

Correspondance entre raccourcis nommés systemd et expressions cron

systemd dispose de raccourcis nommés lisibles comme "daily" et "weekly", et cet outil peut aussi les convertir en expressions cron.

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

Exemples de conversion courants

OnCalendar= Expression cron Signification
*-*-* *:*:00 * * * * * S'exécute chaque minute (équivalent à "* * * * *" en cron).
*:00/15:00 */15 * * * * S'exécute toutes les 15 minutes.
Mon..Fri 09:00:00 0 9 * * 1-5 S'exécute à 9h en semaine (du lundi au vendredi).
*-*-01 00:00:00 0 0 1 * * S'exécute à minuit le 1er de chaque mois.
*-01-01 00:00:00 0 0 1 1 * S'exécute à minuit le 1er janvier chaque année.
Mon *-*-01 00:00:00 0 0 1 * 1 Un exemple spécifiant à la fois un jour du mois (le 1er) et un jour de la semaine (lundi). systemd traite cela comme une condition ET (s'exécute seulement si les deux correspondent), mais cron l'interprète comme une condition OU (s'exécute si l'un ou l'autre correspond) — le résultat converti s'exécute donc plus souvent que ce que prévoyait l'expression OnCalendar d'origine.

Une expression OnCalendar qui restreint à la fois le jour du mois et le jour de la semaine à autre chose que "*" ne peut pas être convertie avec précision en cron (systemd utilise une logique ET, cron utilise une logique OU). Vérifiez toujours la signification du résultat de conversion dans des cas comme celui-ci.

Astuces d'utilisation

  • Vous pouvez saisir directement des raccourcis nommés comme "daily", "weekly" ou "monthly" — ils sont convertis en interne vers l'expression cron équivalente (par exemple, "daily" devient "0 0 * * *").
  • Restreindre à la fois le jour du mois et le jour de la semaine à autre chose que "*" change la signification lors de la conversion de la logique ET de systemd en logique OU de cron. Vérifiez l'avertissement dans ce cas et confirmez que le résultat correspond à votre intention.
  • Les champs année et secondes d'OnCalendar n'ont pas d'équivalent cron et sont donc abandonnés lors de la conversion (un avertissement vous en informe).
  • Pratique lors de la migration de charges de travail hors de systemd — par exemple, lors du déplacement d'une tâche planifiée vers un Kubernetes CronJob (qui utilise une syntaxe de type cron).
  • Pour les plannings simples qui ne combinent pas les restrictions de jour de la semaine et de date (toutes les heures, tous les jours, toutes les semaines, etc.), cette conversion est toujours exacte.

Questions fréquentes

Cela se produit lors de la migration vers un conteneur Docker léger dépourvu de systemd, lors de la reproduction du même planning dans un Kubernetes CronJob (qui utilise une syntaxe de type cron), ou lorsque les outils de votre équipe ne prennent en charge que la configuration au format cron.

Oui. Saisir directement des raccourcis nommés systemd comme "minutely", "hourly", "daily", "weekly", "monthly" ou "yearly" les convertit en l'expression cron équivalente.

Dans la syntaxe OnCalendar de systemd, une restriction de jour de la semaine et une restriction de date sont toujours combinées avec une logique ET (les deux doivent correspondre). Cependant, selon la sémantique classique de Vixie cron, restreindre à la fois le jour du mois et le jour de la semaine à autre chose que "*" en fait une condition OU (il suffit que l'un des deux corresponde). Cet outil détecte ce cas et affiche un avertissement indiquant que le résultat converti peut être plus large (s'exécuter plus souvent) que l'expression OnCalendar d'origine.

Les expressions cron n'ont pas de champ pour l'année, donc toute restriction d'année dans une expression OnCalendar (toute valeur autre que "*") est ignorée lors de la conversion. Cet outil affiche un avertissement dans ce cas, indiquant que le résultat converti s'exécute chaque année, quelle que soit l'année spécifiée.

L'outil couvre les principaux modèles générés par notre outil "Cron vers minuteur systemd" (par minute, toutes les heures, quotidien, hebdomadaire, mensuel, annuel, pas, plages, listes, restrictions de jour de la semaine et raccourcis nommés). Cependant, comme la syntaxe OnCalendar est plus expressive que cron, des spécifications très complexes — plusieurs années, répétitions à la précision de la seconde — ne peuvent pas être représentées avec exactitude en cron et la conversion peut échouer.
ツールくん

Anecdote — Ce que signifie reconvertir un minuteur systemd vers cron

Les migrations technologiques sont généralement présentées comme unidirectionnelles — passer d'un ancien mécanisme à un plus récent —, mais en pratique, la conversion inverse survient aussi fréquemment. Déplacer une charge de travail d'un hôte basé sur systemd vers un conteneur léger qui ne prend en charge que cron, ou vers un outil d'orchestration utilisant une syntaxe de planification de type cron (comme Kubernetes CronJob), signifie reconvertir la syntaxe OnCalendar en expression cron.

Cette "conversion inverse" n'est pas une simple correspondance un à un, car la syntaxe OnCalendar de systemd est plus expressive que cron. Elle prend en charge des concepts que les cinq champs de cron ne peuvent tout simplement pas représenter — restrictions au niveau de l'année, précision à la seconde, et une combinaison de type ET entre date et jour de la semaine. C'est pourquoi cet outil vise à convertir avec précision les modèles couramment utilisés, et traite tout ce qui est plus complexe comme une erreur de conversion plutôt que de deviner une approximation.

La différence sémantique lorsque le jour du mois et le jour de la semaine sont tous deux spécifiés — logique ET chez systemd contre logique OU chez cron — est le plus grand piège de cette conversion inverse. Une condition comme "le 1er du mois" ET "lundi" limite systemd aux seuls jours qui sont à la fois le 1er et un lundi, mais cron s'exécuterait plutôt n'importe quel jour étant soit le 1er, soit un lundi. Cet outil avertit explicitement de cela afin que ce changement de sens, facile à manquer, ne passe pas inaperçu lors d'une migration.