Cron est un petit utilitaire fourni avec toutes les distributions linux qui permet d'exécuter des tâches à des moments donnés. Il permet par exemple de lancer un script de backup tous les dimanches soir à minuit ou de mettre a jour les statistiques de vos sites web toutes les 10 minutes, etc.

Pour l'utiliser, vous devez éditer les tâches "cron" à exécuter avec la commande :

crontab -e

vous voyez donc apparaître une ligne :

# m h dom mon dow command

Chaque ligne ajoutée en dessous représentera une nouvelle tâche à exécuter (sauf si elle est commentée avec "#"). La 1ere colonne se rapporte aux minutes (0->59), la 2ieme colonne se rapporte aux heures (0->23), la 3ieme colonne se rapporte aux jours du mois ( 1->31), la 4ieme colonne se rapporte aux mois ( 1->12 ou les noms en anglais), la 5ieme colonne se rapporte aux jours de la semaine ( 0->7 ou les noms en anglais), la 6ieme colonne se rapporte à la commande à lancer.

Vous pouvez également utiliser l'astérisque pour définir votre tous les intervalles ou encore une liste de valeur avec "," ( 1,2,5,8 par exemple). Il est aussi possible d'utiliser une plage de valeurs avec le "-" ( 1-10 donne "de 1 à 10") ou de spécifier le pas ( */5 donnera "toute les 5 minutes" par exemple).

(voir man 5 crontab).

Un petit exemple?

*/5 12 * * * /ma/commande lancera ma commande toutes les 5 minutes pendant l'heure de midi

0 0 * * mon,tue,wed,thu,fri /mon/script/de/backup exécutera mon backup tous les soirs de la semaine à minuit.

Il existe également une autre syntaxe permettant de faire certaines choses supplémentaires. Elle commence toutes par un "@".

  • @reboot Lance la commande au démarrage de la machine
  • @yearly Lance la commande une fois par an (correspond à "0 0 1 1 *")
  • @annually pareil que @yearly
  • @monthly Lance la commande une fois par mois (correspond à "0 0 1 * *")
  • @weekly Lance la commande une fois par semaine (correspond à "0 0 * * 0")
  • @daily Lance la commande une fois par jour (correspond à "0 0 * * *")
  • @midnight pareil que @daily
  • @hourly Lance la commande une fois par heure (correspond à "0 * * * *")

Nous voyons ici qu'avec cette syntaxe, un utilisateur à la possibilité de lancer un script à chaque démarrage sans avoir les droits root ou sans devoir toucher aux scripts d'init.