Le système d'exploitation GNU-Linux/L'ordonnanceur de travaux cron



cron est un daemon qui permet de programmer des tâches répétitives.

Configuration de cron

modifier

Le fichier de configuration de cron est /etc/crontab, éditable uniquement par le root. Exemple :

  # /etc/crontab: system-wide crontab
  # Unlike any other crontab you don't have to run the `crontab'
  # command to install the new version when you edit this file
  # and files in /etc/cron.d. These files also have username fields,
  # that none of the other crontabs do.
  
  SHELL=/bin/sh
  PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  
  # m h dom mon dow user  command
  17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
  25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
  47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
  52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
  #

Si on veut recevoir un mail à chaque échec d'une tâche, ajouter :

MAILTO=Mon@Email.com

Voici la syntaxe de la programmation de la fréquence de répétition :

m h dom mon dow user command
code signification valeur ou note
m minutes 0 à 60
h heure 0 à 23
dom day of month / jour du mois 1 à 31
mon month / mois 1 à 12
dow day of week / jour de la semaine 0 à 7, 0= dimanche, 7= dimanche, on peut aussi mettre les trois premières lettres du jour en anglais
user user / utilisateur utilisateur appelant la commande
command command / commande commande appelée par l'évènement

Tous les champs peuvent être remplacés par "*" si on souhaite toutes les valeurs correspondantes.

Notation avancée :

On peut définir des valeurs multiples ou des plages de valeurs pour les heures, les jours etc... :

Par exemple, au lieu de faire plusieurs lignes de cron pour plusieurs fois le même évènement, on peut mettre plusieurs valeurs séparées par ","

On peut aussi indiquer une plage de valeur dont les limites sont séparées par "-".

De même, on peut définir des fréquences avec "/". Par exemple, toutes les 2h s'écrira */2 dans la deuxième colonne.

Exemples

modifier
  0 * 7 3 * root beep

L'utilisateur root appelle la commande beep, toutes les heures à 0 minute le 7 mars.

  15,45 8 * * * root beep

L'utilisateur root appelle la commande beep, à 8h15 et 8h45 tous les jours.

  0 8-18 * * * toto beep

L'utilisateur toto appelle la commande beep toutes les heures de 8h à 18h tous les jours.

  0 12 * * mon,wed,fri titi beep

L'utilisateur titi appelle la commande beep à midi tous les lundi, mercredi et vendredi.

  0 */2 * * 1-5 tata beep

L'utilisateur tata appelle la commande beep toutes les 2h du lundi au vendredi.

Répertoires de cron

modifier

En plus de la commande cron, il existe des répertoires spécifiques pour définir des commandes cron à fréquences précises. Ces répertoires particuliers sont localisés dans le repertoire /etc

Titre du tableau
cron.hourly toutes les heures
cron.daily tous les jours
cron.weekly toutes les semaines
cron.monthly tous les mois

Il suffit de mettre un fichier script exécutable dans le répertoire choisi pour qu'il s'exécute.

Dans le même ordre d'idée, on peut rajouter des répertoires particuliers reliés à des fonctions spécifiques d'une entreprise ou d'une personne, pour exécuter des cron. Il suffit de mettre des fichiers contenants des lignes cron dans le répertoire /etc/cron.d/.

exemple : /etc/cron.d/comptabilite


Une fois le crontab modifié, il faut lui faire prendre en compte les modifications. Pour cela, on dispose de trois méthodes :

 # kill -1 <PID du processus cron>

ou

 # killall -1 cron

ou

 # /etc/init.d/cron restart

Les crontabs utilisateurs

modifier

Un utilisateur peut programmer ses propres crontabs. Ces crontabs sont stockés dans /var/spool/cron/crontabs/<login>

Titre du tableau
crontab -l donne la liste des crontabs actifs
crontab -e permet d'éditer son propre crontab

En utilisant la commande crontab , il n'est pas nécessaire de relancer le daemon cron pour que les modifications soient prises en compte.

Droits d'accès

modifier
À faire... 

parler de cron.allow et cron.deny



L'horloge Linux

modifier

Avant de planifier ses opérations il est primordial de bien s'assurer que les informations de temps système sont correctes.

Réglage manuel

modifier

Pour connaître la date actuelle on utilise la commande date :

 # date
 mer aoû 19 12:31:00 CEST 2009

Cette même commande accepte des arguments pour forcer la mise à jour de l'horloge système au format "MMJJHHmmYYYY". Il faut disposer des droits super utilisateur pour cette action.

 # date 081912372009
 Wed Aug 19 12:37:00 CEST 2009

Enfin, il existe deux horloges dans le système, l'horloge matérielle et l'horloge logicielle. Pour synchroniser ces deux horloges utilisez la commande hwclock.

 # hwclock --systohc  //initialise l'heure matérielle à partir de l'horloge système
 # hwclock --hctosys  //initialise l'heure système à partir de l'horloge matérielle

Réglage automatique (NTP)

modifier

Network Time Protocol (NTP) est un protocole de synchronisation de l'heure courante. Pour que l'heure de la machine soit récupérée du réseau :

date
sudo apt-get install ntp
sudo service ntp stop
sudo ntpd -gq
sudo service ntp start
date

 

Lors du changement d'heure hiver/été où on passe de 2 h à 3 h, les tâches programmées entre 2 h 00 et 2 h 59 ne seront donc pas exécutées. À l'inverse, lors du changement d'heure été/hiver, ces mêmes tâches seront exécutées deux fois (à 3 h, il est encore 2 h). Afin d'éviter ce désagrément, la plupart des systèmes Unix sont configurés pour utiliser le temps universel coordonné (UTC), qui n'est pas sujet à ces règles de changement d'heure.