Règles de génération et format
Exemple de génération
Tous les jours 09:00 donne 0 9 * * *; lundi 09:00 donne 0 9 * * 1; les postes de quart d'heure donnent 0,15,30,45 * * * *.
Hypothèses et limites
- Il s'agit d'un sous-ensemble POSIX numérique strict. Slash steps, dimanche 7, mois/jour noms, @macros, Quartz ?/L/W/#, secondes et années sont rejetés. Dimanche c'est 0.
- Les champs restreints du jour de mois et du jour de semaine utilisent OU, non ET. POSIX définit également une règle combinée de mois/date par rapport au jour de la semaine; vérifiez l'implémentation de la cron cible.
- Les minutes se répètent dans chaque heure. L'espacement 7 donne 0,7...56, puis un écart de 4 minutes à l'heure suivante. Ce n'est pas une minuterie.
- Une expression ne contient pas de fuseau horaire. Zone serveur, DST, temps d'arrêt et dialecte cron affectent l'exécution réelle. Cet outil ne prédit pas de temps d'exécution et n'installe aucun travail.
Foire aux questions
Dans les expressions cron, est-ce que 0 ou 7 représente le dimanche?
Dans Linux Vixie Cron standard et la plupart des planificateurs POSIX, 0 et 7 représentent le dimanche (1 est du lundi au 6 pour le samedi). Cependant, certains environnements POSIX ou Unix anciens ne acceptent que 0, alors que certains planificateurs Java Quartz map dimanche à 1. Pour une portabilité maximale dans différents environnements d'exploitation, il est fortement recommandé d'utiliser 0 pour le dimanche ou de spécifier des plages de jours de semaine explicites comme 1-5.
Comment le cron évalue-t-il quand le jour du mois et le jour de la semaine spécifient des valeurs concrètes?
Selon la spécification POSIX, si les champs jour de mois et jour de semaine sont spécifiés avec des valeurs autres que *, ils forment une condition logique OU plutôt qu'une ET logique. Par exemple, '0 0 15 * 5' fonctionne le 15 du mois ET tous les vendredis à minuit. Si l'exigence d'affaires est strictement 'vendredi 15', cron standard ne peut pas l'exprimer dans une seule règle; un shell garde comme [ $(date +%u) -eq 5 ] doit le vérifier dans le script exécuté.
Quelle est la différence entre la syntaxe des étapes comme */15 et les étapes des plages comme 0-30/10 ?
L'opérateur/slash indique les incréments d'étapes. Dans le champ minute, '*/15' commence à partir de la limite inférieure (0) et déclenche toutes les 15 minutes, soit l'équivalent de '0,15,30,45'. En revanche, '0-30/10' limite la marche en quelques minutes 0 à 30, s'étendant à '0,10,20,30' et ignorant le reste de l'heure. Notez que la syntaxe étape est une extension non-POSIX dans l'ancien Unix ; cet outil génère une énumération explicite strictement compatible POSIX pour garantir une exécution transparente partout.
Comment les différences de fuseau horaire et les sauts d'heure devraient-ils être traités dans le crontab de production?
Crontab évalue les horaires par rapport au fuseau horaire du système hôte (/etc/localtime). Dans les régions qui observent Daylight Saving Time (DST), l'horloge du printemps vers l'avant fait que les tâches prévues entre 02:00 et 03:00 sont complètement écourtées, tandis que le recul de l'automne les fait courir deux fois. Les pratiques exemplaires de l'industrie recommandent : 1. Configurer tous les serveurs de production en UTC à l'échelle mondiale; 2. Définir CRON_TZ=UTC ou CRON_TZ=Amérique/New_York explicitement en haut du crontab; 3. Évitez de programmer des tâches de groupe financier à un seul point entre 02:00 et 03:00.
Pourquoi les emplois de cron échouent-ils souvent silencieusement en raison de variables d'environnement manquantes, et comment rediriger la sortie?
Les tâches Cron s'exécutent dans un shell non interactif et non-login avec un minimum de PATH par défaut (/usr/bin:/bin), contournant les configurations d'environnement dans ~/.bashrc ou ~/.profile. Cela se traduit souvent par des erreurs 'command not found' malgré le succès manuel dans un terminal. Les normes de production exigent : 1. Déclarer explicitement PATH=/usr/local/bin:/usr/bin:/bin en haut du crontab; 2. Utilisez toujours des chemins absolus pour les exécutables et les scripts (/usr/bin/python3 /opt/app/run.py); 3. Rediriger stdout et stderr vers des fichiers log dédiés avec '>> /var/log/app_task.log 2>&1' plutôt que de jeter aveuglément vers /dev/null.
Que signifient les 5 champs d'une expression cron ?
De gauche à droite: minute (0–59), heure (0–23), jour du mois (1–31), mois (1–12) et jour de la semaine (0–6, où 0 est dimanche); astérisque signifie n'importe quelle valeur. 0 9 * * 1-5 marche à 9:00 les jours de semaine, 30 2 1 * * à 2:30 sur la 1st de chaque mois et 0 0 * * 0 à minuit tous les dimanches. 6–7 les champs, avec des secondes d'abord et parfois un an à la fin, donc les formats ne sont pas interchangeables. Les temps suivent le fuseau horaire du serveur.