Planification des tâches via Crontab

13 fév Planification des tâches via Crontab

Le service crond

Il est chargé de faire exécuter par le système toutes tâches (commandes et scripts) définies et planifiées à l’avance
Ces tâches allant de la simple commande aux scripts complexes peuvent ainsi être exécutées à heure fixe et même de façon périodique, et fait l’objet de messages de compte-rendu.
La commande /usr/bin/crontab permet cette programmation. Son usage est en principe réservée à root. On peut toutefois autoriser certains utilisateurs. Pour cela on en dresse la liste sur des lignes successives dans le fichier /etc/crond.allow, et de façon symétrique, on peut mettre dans /etc/crond.deny la liste des utilisateurs non autorisés.

Exemple : seuls jean et toto ont la permission d’utiliser le service crontab
# ll cron.allow
jean
toto

Fonctionnement

Le processus crond est normalement lancé au démarrage.
On peut le lancer ou l’arrêter avec /etc/rc.d/init.d/crond
Il lit toutes les minutes les fichiers présents dans le répertoire /var/spool/cron (et aussi le fichier /etc/crontab, pour voir si des tâches doivent être exécutées.
Chaque action de crond ajoute une ligne de message dans le fichier /var/log/cron, qu’il faut purger de temps en temps … par une commande crontab !
Par défaut si une commande produit un affichage, il est dirigé vers la messagerie
Commande crontab [-u user] {-l | -r | -e }
Options :
crontab -l affiche le fichier crontab de l’utilisateur
crontab -r efface ce fichier
crontab -l -u jean root examine le fichier crontab de l’user jean
crontab -e crée ou édite (pour modification) un fichier temporaire dans /tmp ouvert dans vi

Lors de la sauvegarde, le fichier est écrit dans /var/spool/cron/$USER, où $USER est le nom de login de l’utilisateur.

Syntaxe des lignes des tables crontab

Chaque ligne du fichier contient 6 champs, les 5 premières déterminent les moments d’exécution de la tâche décrite au 6ème champ.

  • les 5 premiers, séparés par des espaces, appelés champs temporels, décrivent la périodicité :
    minutes (0-59), heures (0-23), jour du mois (1-31), mois de l’année (1-12), jour de la semaine (0-6, 0= dimanche)
  • le 6ème est la commande à exécuter, ce peut être naturellement un script qcq
    un champ temporel peut contenir :

  • une valeur précise et valide pour le champ (par exemple 15 sur le champ minute)
  • une liste de valeurs valides, séparées par des virgules (1,3,5 dans le champ mois : janvier, mars, mai)
  • un intervalle valide (1-5 dans le champ jour : du lundi au vendredi)
  • * pour signifier toutes les valeurs possibles du champ (* dans le champ minute : toutes les minutes)
  • */5 (dans le champ minutes : tous les 5 minutes), 0-23/3 (dans le champ heures : toutes les 3 heures)

Exemples

# exécution chaque 1er et 15 de chaque mois à minuit
0 0 1,15 * * commande

# provoquer un reboot la machine chaque 1er et 15 du mois à 2h 30 du matin
30 2 1,15 * * /sbin/shutdown -r

# appeler un script de sauvegarde tous les lundis a 3 h 15 du matin
15 3 * * 1 /usr/bin/backup

# exécution toutes les heures passées 15 minutes
15 * * * * commande

# exécution tous les matins du lundi au vendredi à 7 h 30
30 7 * * 1-5 commande

# exécution tous les quarts d’heure de 15h à 19h du lundi au vendredi
# seulement en 1ère quinzaine du troisième trimestre
0,15,30,45 15-19 1-15 7-9 1-5 commande

# trouver puis nettoyer le répertoire /tmp des vieux fichiers (non modifiés
# depuis 31 jours) tous les 1er jour de chaque mois, à 2 heures du matin
0 2 1 * * find /tmp -atime 31 -exec rm -f {} ;

Be Sociable, Share!
Tags:
No Comments

Post A Comment