Convertisseur cron / minuterie systemd | Conversion bidirectionnelle cron ↔ OnCalendar avec aperçu de 5 déclenchements et .timer prêt à coller
Convertisseur bidirectionnel entre expressions cron POSIX et chaînes systemd OnCalendar, avec aperçu des 5 prochains déclenchements et un modèle .timer ou une ligne crontab prêts à coller. L'objectif est de repérer les erreurs de syntaxe et les plannings « pas tout à fait ça » avant de lancer systemctl enable.
💡 À propos de cet outil
cron et systemd-timer expriment la même idée — déclencher une action à un instant donné — mais avec une syntaxe sensiblement différente. cron se lit de gauche à droite : minute heure jour mois jour-semaine. OnCalendar, lui, place le jour de la semaine en tête, puis un triplet de date et enfin HH:MM:SS. La conversion mécanique est directe, mais les détails piègent : MON-FRI devient Mon..Fri, */15 devient *:0/15, le cron à six champs (avec secondes) n'a pas d'équivalent POSIX et RandomizedDelaySec n'existe tout simplement pas côté cron.
L'outil traite ces cas. Il développe les formes liste, plage, pas et nom (JAN-DEC, MON-FRI) puis émet la chaîne OnCalendar avec préfixe DOW uniquement lorsque c'est utile. Dans le sens inverse, il interprète les plages .. et le pas 0/N propres à systemd, isole RandomizedDelaySec dans le panneau d'avertissements et produit une ligne crontab à 5 champs. Les deux sens affichent les 5 prochains déclenchements pour 9 fuseaux courants — utile pour valider contre l'horloge du serveur avant de pousser la modification.
Le modèle .timer inclut Persistent=true et AccuracySec=1min par défaut, qui conviennent aux tâches ponctuelles. Pour un déclenchement plus précis ou pour empêcher la sortie de veille, ajustez ces lignes après copie. L'unité suppose qu'une .service complémentaire existe sous le même nom de base.
🧐 Questions fréquentes
Q. Le format cron à 6 champs (avec secondes) est-il pris en charge ?
A. Oui — le premier champ est interprété comme secondes et reporté dans HH:MM:SS de OnCalendar. Un avertissement précise que cron POSIX ignore la précision inférieure à la minute ; seul systemd l'honore.
Q. Pourquoi @daily ou @reboot ne sont-ils pas acceptés ?
A. L'analyseur gère uniquement la grille * * * * * explicite. @daily équivaut à 0 0 * * *, saisissez-le sous cette forme. @reboot n'a pas d'équivalent OnCalendar ; utilisez OnBootSec= ou OnStartupSec= directement dans l'unité .timer.
Q. Que devient RandomizedDelaySec lors du passage à cron ?
A. Il est retiré, avec un avertissement dans le panneau. cron n'a pas de jitter natif ; pour disperser l'exécution, ajoutez sleep $((RANDOM % 60)) en tête du script appelé par cron. L'outil ne réalise pas cette réécriture automatiquement.
Q. L'aperçu affiche UTC, mais mon serveur est dans un autre fuseau
A. Le menu de fuseaux propose UTC, le fuseau du navigateur, JST, ET, PT, GMT, CET (×2) et BRT. Sélectionnez celui qui correspond et la liste des 5 prochains déclenchements est recalculée. Pour ancrer le fuseau dans le timer lui-même, ajoutez Timezone= dans la section [Timer] après copie.
Q. La plage Mon..Fri est-elle conservée lors du passage systemd → cron ?
A. Elle est développée en liste 1,2,3,4,5 dans la ligne cron. Si vous préférez la forme 1-5, réécrivez à la main ; tous les crond courants acceptent les deux notations.
Q. Pourquoi mon expression échoue-t-elle ?
A. Les erreurs apparaissent dans le panneau rouge sous le champ d'entrée avec le token fautif (Invalid value: ..., Date must be Y-M-D). La sortie reste à -- tant que l'entrée n'est pas valide.
📚 Le saviez-vous
systemd-timer est arrivé avec systemd v183 en 2012, mais crond est bien plus ancien — l'utilitaire cron(8) a été livré avec Version 7 Unix en 1979 et exécute des lots à travers le monde depuis plus de quatre décennies. Les deux cohabitent parce qu'ils résolvent des problèmes légèrement différents : le contrat cron est « exécute cette ligne à cet horaire », tandis qu'un timer systemd n'est qu'un déclencheur qui active une .service définie ailleurs. Cette indirection coûte un peu d'effort pour un simple script, mais elle paie dès qu'on a besoin de limites de ressources, de fichiers d'environnement, d'ordonnancement de dépendances ou de journalisation structurée.
OnCalendar ressemble à ISO 8601, mais son joker * et son opérateur de pas 0/N sont des extensions propres à systemd — ISO 8601 ne connaît ni l'un ni l'autre. La commande systemd-analyze calendar 'Mon..Fri *-*-* 09:30:00' évalue l'expression et imprime les prochains déclenchements ; c'est exactement le calcul que cette page réalise dans le navigateur.