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
modifierLe 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 :
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
modifier0 * 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
modifierEn 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
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
modifierUn utilisateur peut programmer ses propres crontabs. Ces crontabs sont stockés dans /var/spool/cron/crontabs/<login>
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
L'horloge Linux
modifierAvant de planifier ses opérations il est primordial de bien s'assurer que les informations de temps système sont correctes.
Réglage manuel
modifierPour 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)
modifierNetwork 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.