Cron

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Planification de tâches (démon)
Démon crond / cron
Paquet cronie (RHEL/CentOS) ou cron (Debian/Ubuntu)
Fichiers surveillés /etc/crontab · /etc/cron.d/ · /var/spool/cron/
Voir aussi Crontab (syntaxe 5 champs) · Systemd (timers, alternative moderne)

cron désigne à la fois le démon (crond sous RHEL/CentOS, cron sous Debian/Ubuntu) et, plus largement, l'écosystème de fichiers qu'il lit pour savoir quoi exécuter et quand. Cette page traite du démon et de son environnement de fichiers ; pour la syntaxe des 5 champs et la commande crontab elle-même, voir Crontab.

Le démon

Au démarrage, le démon cron lit l'ensemble de ses sources de tâches, calcule les prochaines échéances, puis reste en veille jusqu'à la minute suivante pour vérifier à nouveau — la granularité de cron est la minute, il ne peut pas planifier à la seconde près.

systemctl status crond          # RHEL/CentOS
systemctl status cron           # Debian/Ubuntu
journalctl -u crond             # journaux du démon

Sur les distributions basées sur systemd, crond reste un démon traditionnel (pas une unité native systemd de type timer) : il est simplement supervisé comme n'importe quel service via systemctl.

Sources lues par le démon

Le démon agrège plusieurs sources, chacune avec un format légèrement différent :

  • /etc/crontab — crontab système historique, avec un champ utilisateur supplémentaire par rapport aux crontabs individuels. C'est généralement lui qui déclenche run-parts sur les répertoires /etc/cron.{hourly,daily,weekly,monthly}.
  • /etc/cron.d/ — répertoire de fichiers crontab système indépendants (un par paquet ou par usage), même format que /etc/crontab (avec champ utilisateur). Pratique pour livrer une tâche avec un paquet ou un déploiement sans toucher au crontab système global.
  • /var/spool/cron/ (ou /var/spool/cron/crontabs/ selon la distribution) — un fichier par utilisateur, généré et géré exclusivement par crontab -e. Format sans champ utilisateur puisque le fichier appartient déjà à un utilisateur donné.
cat /etc/crontab
ls /etc/cron.d/
ls /var/spool/cron/          # ou /var/spool/cron/crontabs/

Le démon surveille ces emplacements (notification du système de fichiers ou re-scan périodique selon l'implémentation) et recharge automatiquement dès qu'un fichier est ajouté ou modifié — aucun redémarrage n'est nécessaire dans l'usage courant.

anacron : rattraper les tâches manquées

cron part du principe que la machine tourne en permanence : si elle est éteinte au moment où une tâche aurait dû s'exécuter, l'occurrence est simplement perdue. anacron comble ce manque pour les machines qui ne tournent pas 24/7 (postes de travail, serveurs éteints la nuit) : il compare la date de dernière exécution d'une tâche (stockée dans /var/spool/anacron/) à la date du jour, et rattrape les tâches en retard au prochain démarrage.

cat /etc/anacrontab
# période(jours)  délai(minutes)  identifiant  commande
1        5      cron.daily     run-parts /etc/cron.daily
7        25     cron.weekly    run-parts /etc/cron.weekly
@monthly 45     cron.monthly   run-parts /etc/cron.monthly

anacron ne remplace pas cron : il ne gère qu'une granularité journalière ou plus large (pas d'heure précise, juste un délai après le démarrage), et sert typiquement de filet de sécurité pour les répertoires cron.{daily,weekly,monthly}. L'articulation exacte entre cron et anacron sur ces répertoires (lequel des deux déclenche run-parts en premier) varie selon la distribution — à vérifier au cas par cas.

Contrôle d'accès

cat /etc/cron.allow          # si présent, liste blanche exclusive des utilisateurs autorisés
cat /etc/cron.deny           # sinon, liste noire des utilisateurs interdits

Si aucun des deux fichiers n'existe, le comportement par défaut dépend de la distribution (souvent : tout le monde autorisé) — à vérifier selon le paquet installé.

Voir aussi

  • Crontab — syntaxe des 5 champs et commande crontab -e/-l/-r
  • Systemd — les timer units, alternative moderne à cron pour les services gérés par systemd