Les pubs vous déplaisent ? Aller Sans pub Auj.

Arrêtez de chercher la syntaxe Cron — il y a un générateur pour cela

Mis à jour le

Les expressions Cron sont l'une de ces choses que l'on utilise constamment mais que l'on ne retient jamais. Voici ce que signifient exactement les cinq champs, les erreurs qui font souffrir les utilisateurs, et pourquoi un générateur en ligne d'expression Cron est simplement l'approche plus intelligente.

Arrêtez de chercher la syntaxe cron — il y a un générateur pour cela 1
ANNONCE · Supprimer ?

Il est 2h. Un déploiement est planifié pour 6h. Vous devez vérifier à nouveau que la tâche cron s'active effectivement à l'heure correcte. Alors vous ouvrez une nouvelle onglet et tapez « syntaxe cron » dans Google. Encore.

C'est un rite de passage. Chaque développeur ayant jamais touché un serveur Linux l'a fait au moins une fois — et la plupart d'entre nous l'ont fait plus de fois qu'ils ne le souhaitent. Les expressions cron sont l'un de ces éléments que vous utilisez constamment, mais que vous ne retenez jamais vraiment. La syntaxe se situe dans une zone inconfortable entre « trop simple pour être recherchée » et « assez spécifique pour être mal interprétée ».

Il y a une meilleure méthode. Utilisez un générateur d'expression cron en ligne et laissez l'outil gérer la syntaxe pendant que vous vous concentrez sur ce qui compte vraiment.

Pourquoi la syntaxe cron refuse de s'ancrer

Cron possède cinq champs. Cinq. C'est tout. Et pourtant, l'ordre fait toujours mal à tout le monde :

# ┌───────────── minute (0–59)
# │ ┌───────────── hour (0–23)
# │ │ ┌───────────── day of month (1–31)
# │ │ │ ┌───────────── month (1–12)
# │ │ │ │ ┌───────────── day of week (0–6, Sunday=0)
# │ │ │ │ │
  * * * * * command

Le problème n'est pas qu'il est difficile — c'est qu'il y a juste assez de caractères spéciaux pour introduire de l'ambiguïté. Est-ce « tous les 5 minutes » ou « à la minute 5 » ? Le job s'exécute-t-il à 9h ou à 9pm ? Qu'est-ce qui se passe si vous oubliez que les mois sont indexés à partir de 1, mais les jours de la semaine commencent à 0 ? */5 « tous les 5 minutes » ou « à la minute 5 » ? Le job s'exécute-t-il à 9h ou à 9pm ? Qu'est-ce qui se passe si vous oubliez que les mois sont indexés à partir de 1, mais les jours de la semaine commencent à 0 ? 0 9 * * 1-5 s'exécute-t-il à 9h ou à 9pm ? Qu'est-ce qui se passe si vous oubliez que les mois sont indexés à partir de 1, mais les jours de la semaine commencent à 0 ?

Ce ne sont pas des pièges pour les débutants. Ce sont des pièges pour tout le monde. Une tâche cron mal configurée est l'une des manières silencieuses d'introduire un incident en production — le genre où rien ne tombe en panne immédiatement, il ne se produit rien, et vous ne le remarquez qu'après trois jours.

Les cinq champs, expliqués sans cérémonie

Voici la version pratique :

  • Minute (0–59) — La minute de l'heure lorsque la tâche s'exécute. 30 signifie la 30e minute. */15 signifie toutes les 15 minutes.
  • Heure (0–23) — Utilise le format de 24 heures. 9 signifie 9h. 17 signifie 17h. Aucun malaise AM/PM.
  • Jour du mois (1–31) — Le jour du calendrier. 1 signifie le premier jour du mois. 15 signifie le 15e.
  • Mois (1–12) — Janvier est 1, Décembre est 12. Vous pouvez aussi utiliser des noms : JAN, FEB, etc.
  • Jour de la semaine (0–6 ou 1–7) — Dimanche peut être 0 ou 7 selon votre implémentation de cron. Lundi est toujours 1. Ce champ est celui qui cause le plus de confusion.

Les caractères spéciaux qui comptent

  • * — Tous les valeurs possibles (chaque minute, chaque heure, etc.)
  • */n — Chaque Le texte n'est pas lisible ou pertinent pour une traduction.e intervalle. */5 dans le champ des minutes signifie tous les 5 minutes.
  • a-b — Une plage. 1-5 dans le champ des jours de la semaine signifie lundi au vendredi.
  • a,b,c — Une liste. 1,3,5 signifie lundi, mercredi, vendredi.
  • @reboot, @hourly, @daily — Des abréviations. Pas supportées partout.

Les erreurs courantes qui frappent les gens

1. Oublier le fuseau horaire

Cron s'exécute dans le fuseau horaire local du serveur. Si votre serveur est en UTC et que vous êtes à New York, 0 9 * * * ne s'exécute pas à 9h de l'Est — il s'exécute à 4h ou 5h, selon le DST. Connaître toujours le fuseau horaire de votre serveur. Toujours.

2. Utiliser à la fois le jour du mois et le jour de la semaine

Si vous spécifiez une valeur dans les deux champs jour du mois et jour de la semaine (plutôt que * dans l'un des deux), la plupart des implémentations de cron l'interprètent comme une OR — la tâche s'exécute lorsque l'un des deux conditions est remplie. C'est presque jamais ce que vous voulez.

3. Attendre que */1 signifie « une seule fois »

*/1 est équivalent à *. Cela signifie « tous les ». Il n'est pas possible d'exprimer « exécuter une seule fois » dans le cron standard — pour cela, vous devriez utiliser at ou un timer systemd à usage unique.

4. Ne pas tester avant le déploiement

Cron ne fournit pas de retour immédiat. Vous écrivez l'expression, vous la sauvegardez dans le crontab, puis vous attendez. Si elle est fausse, vous le découvrez à 3h lorsque le backup planifié ne s'exécute pas. C'est pourquoi utiliser un calculateur de prochaine exécution cron avant le déploiement en vaut la peine, même s'il prend 30 secondes.

Utilisez un générateur d'expression cron au lieu de le faire manuellement

L'avis honnête : arrêtez de tenter d'écrire des expressions cron à partir de la mémoire. Utilisez un générateur. Ce n'est pas une faiblesse — c'est la manière de éviter des erreurs bêtes en production.

Le générateur d'expression cron sur IOTools vous permet de construire n'importe quelle expression de manière visuelle — choisissez votre intervalle de minutes, d'heure, jour de la semaine, et il vous montre l'expression exacte ainsi qu'une explication en langage simple de l'heure d'exécution. Aucune mémoire requise, aucune page de documentation ouverte.

Une fois que vous avez l'expression, passez-la par le calculateur de prochaine exécution cron. Collez l'expression, obtenez les 5 à 10 prochaines heures d'exécution prévues. Cela prend cinq secondes et vous dira immédiatement si vous avez accidentellement planifié votre tâche de nettoyage pour s'exécuter toutes les minutes au lieu d'une fois par jour.

Ce deuxième contrôle est celui que la plupart des gens omètent. Ne l'omettez pas.

Référence rapide : expressions que vous utiliserez réellement

ExpressionSignification
* * * * *Chaque minute
0 * * * *Chaque heure, à l'heure
0 9 * * *Chaque jour à 9h00
0 9 * * 1-5Les jours ouvrés à 9h00
*/15 * * * *Toutes les 15 minutes
0 0 * * 0Chaque dimanche à minuit
0 0 1 * *Premier jour de chaque mois à minuit
30 4 1,15 * *1er et 15e du mois à 4h30
0 22 * * 1-5Les jours ouvrés à 22h00
@dailyUne seule fois par jour à minuit (abréviation)
Envie d'une expérience sans pub ? Passez à la version sans pub

Installez nos extensions

Ajoutez des outils IO à votre navigateur préféré pour un accès instantané et une recherche plus rapide

Sur Extension Chrome Sur Extension de bord Sur Extension Firefox Sur Extension de l'opéra

Le Tableau de Bord Est Arrivé !

Tableau de Bord est une façon amusante de suivre vos jeux, toutes les données sont stockées dans votre navigateur. D'autres fonctionnalités arrivent bientôt !

ANNONCE · Supprimer ?
ANNONCE · Supprimer ?
ANNONCE · Supprimer ?

Coin des nouvelles avec points forts techniques

Impliquez-vous

Aidez-nous à continuer à fournir des outils gratuits et précieux

Offre-moi un café
ANNONCE · Supprimer ?