Cron

De The Linux Craftsman
Révision datée du 10 mars 2014 à 19:28 par Magsss (discussion | contributions) (→‎Planification)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Introduction

cron est un programme qui permet aux utilisateurs des systèmes Unix d'exécuter automatiquement des scripts, des commandes ou des logiciels à une date et une heure spécifiées à l'avance, ou selon un cycle défini à l'avance.

Le nom est dérivé du grec chronos (χρόνος), signifiant le temps. [...]

cron est un service (daemon), ce qui [...] désigne un programme qu'on ne lance qu'une seule fois après le démarrage de l'ordinateur et qui reste en tâche de fond en attendant qu'on ait besoin de lui. Le service cron (crond) attend ainsi jusqu'au moment spécifié dans le fichier de configuration (que l'on appelle la crontab) puis effectue l'action correspondante et se rendort jusqu'à l'événement suivant. [...] [1]

Utilisation de cron

Pour utiliser cron on va utiliser la commande crontab qui nous permettra d'éditer le tableau ou le démon cron prend ses informations.

Listing des tâches

Dans un premier temps on va regarder le contenu de ce fichier

# crontab -l
no crontab for root

Ajout d'un tâche

Il n'y a pas de tâches planifiées pour l'utilisateur root et nous allons en créer une !

crontab -e

* * * * * date >> /tmp/test_cron

Comme vous pouvez le deviner, cette commande va écrire la date dans le fichier /tmp/test_cron, mais la vraie question est: à quel intervalle ?

Vérifions:

# cat /tmp/test_cron
mar. févr. 18 06:26:01 CET 2014
mar. févr. 18 06:27:02 CET 2014
mar. févr. 18 06:28:01 CET 2014
mar. févr. 18 06:29:02 CET 2014
mar. févr. 18 06:30:01 CET 2014
mar. févr. 18 06:31:01 CET 2014
mar. févr. 18 06:32:02 CET 2014
mar. févr. 18 06:33:01 CET 2014
mar. févr. 18 06:34:02 CET 2014
mar. févr. 18 06:35:01 CET 2014

A priori, la tâche est exécutée toutes les minutes. Regardons maintenant comment on peut planifier une tâche.

Planification

La planification se découpe comme suit:

* * * * * commande
minutes heures jour du mois mois jour de la semaine commande à exécuter

Les valeurs sont comprises entre:

  • pour les minutes: 0 - 59
  • pour les heures: 0 - 23
  • pour les jours du mois: 1 - 31
  • pour les mois: 1 - 12
  • pour les jours de la semaine: 0 - 6 (0 = dimanche)

Les répétitions

La minute ??

Comment répéter une commande à un intervalle plus court que la minute ? Impossible, cron ne permet pas cette possibilité.

Les multiples

Comment répéter une commande toutes les deux heures ? Toutes les deux minutes ?

En effet, si on procède comme suit:

* 2 * * * commande

La commande sera exécutée tous les jours à 2h du matin...

Il faut utiliser le / pour préciser que l'on veut un multiple


* */2 * * * commande

Exécutera la commande toutes les 2 heures (à 2h00, 4h00, ...)

Références