Comment Ca Marche - Communauté informatique  
   
Accueil - Encyclopédie informatiqueTélécharger l'encyclopédieContribuer à cet article

Linux - Ordonnancement des taches

Ordonnancement des taches sous Linux avec Cron Encyclopédie


Introduction à l'ordonnancement des tâches

L'ordonnancement des tâches consiste à exécuter automatiquement une tâche (une application, une commande, ...) à intervalles de temps réguliers ou bien à des moments précis. Généralement ce type de procédé est utilisé pour automatiser des sauvegardes (on parle de backup), notamment à des heures où le système est le moins sollicité (typiquement pendant la nuit pour les serveurs).

Présentation de cron

Les systèmes de type Unix (donc Linux) possèdent une application (plus exactement un démon) permettant de réaliser ce type de service, il s'agit de cron.

Cron est basé sur une table référençant les tâches à lancer ainsi que l'année, le mois, le jour, l'heure et la minute à laquelle l'exécuter.

Cron est ainsi constitué:

  • d'un démon: crond, c'est-à-dire un programme résident en mémoire lançant automatiquement les tâches en fonction de la table cron
  • d'une commande: crontab, permettant d'éditer la table des tâches à ordonnancer

cron (en réalité crond) se trouve généralement dans le répertoire /usr/sbin ou /sbin dans les distributions récentes. Pour connaître l'emplacement de crond dans votre distribution linux, il vous suffit de taper la commande suivante :

whereis crond

La commande crontab édite en fait un fichier relatif à l'utilisateur qui l'exécute. Ce fichier se situe dans :

/var/spool/cron/crontabs/utilisateur
Ainsi pour l'utilisateur root la table cron sera stockée dans :
/var/spool/cron/crontabs/root

Syntaxe de cron

Afin d'éditer la table cron, il suffit d'exécuter la commande suivante :

crontab -e
Cette commande a pour effet de lancer l'éditeur Vi présentant la table actuelle (donc aucune si il s'agit du premier lancement de crontab).

Chaque entrée de la table (chaque ligne) correspond à une tâche à exécuter et est notée de la façon suivante :

mm hh jj MMM JJJ tâche > log
Dans cette syntaxe :
  • mm représente les minutes (de 0 à 59)
  • hh représente l'heure (de 0 à 23)
  • jj représente le numéro du jour du mois (de 1 à 31)
  • MMM représente le numéro du mois (de 1 à 12) ou l'abréviation du nom du mois (jan, feb, mar, apr, ...)
  • JJJ représente l'abréviation du nom du jour ou le chiffre correspondant au jour de la semaine (0 représente le dimanche, 1 représente le lundi, ...)
  • tâche représente la commande ou le script shell à exécuter
  • log représente le nom d'un fichier dans lequel stocker le journal des opérations. Si la clause > log n'est pas spécifiée, cron enverra automatiquement un mail de confirmation. Pour éviter cela il suffit de spécifier > /dev/null
Pour chaque unité de temps (minute/heure/...) les notations sont possibles :
  • *: a chaque unité de temps
  • 2-5: les unités de temps (2,3,4,5)
  • */3: toutes les 3 unités de temps (0,3,6,...)
  • 5,8: les unités de temps 5 et 8

Quelques exemples d'utilisation

Imaginons que l'on veuille faire un journal (dans le fichier /tmp/log_df.txt par exemple)automatisé de l'espace disque libre (commande df) à des intervalles de temps précis :

  • Tous les jours à 23h30 :
    30 23 * * * df >>/tmp/log_df.txt
  • Tous les premiers du mois à 23h30 :
    30 23 1 * * df >>/tmp/log_df.txt
  • Tous les lundis à 22h28 :
    28 22 * * 1 df >>/tmp/log_df.txt
  • Du 2 au 5 de chaque mois à 10h12
    12 10 2-5 * * df >>/tmp/log_df.txt
  • Tous les jours pairs du mois à 23h59
    59 23 */2 * * df >>/tmp/log_df.txt
Il est également possible d'exécuter automatiquement des commandes plus complexes à l'aide d'un script shell. Il suffit donc dans un premier temps de créer un script. Puis de le déclarer en tant que tâche dans la table cron.

Le script shell suivant (que l'on supposera stocke dans /home/backup sous le nom backup.cmd)exporte les enregistrements de MySQL (de la table ccmusers par exemple) dans un fichier dont le nom est ccmusers suivi de la date sous la forme jour-mois-annee-heure-minute :

#!/bin/sh
DATE=$(date +%d-%m-%Y-%H-%M)
/usr/local/mysql/bin/mysqldump -u root ccmusers > /home/backup/ccmusers${DATE}.sql
Ainsi pour automatiser (chaque jour à 23h59) le backup de la table ccmusers de MySQL, il suffira d'ajouter l'entrée suivante dans la table cron :
59 23 * * * /home/backup/backup.cmd >>/dev/null

Inspiré d'un article de Linux Magazine

Trucs & astuces pertinents trouvés dans la base de connaissances

13/02 20h27 Applications pour entreprises (Linux)
10/02 19h31 Equivalences logicielles pour GNU/Linux (Logiciel libre)
29/01 13h38 Multiboot sur PC de type Packard Bell (Linux)
23/01 15h42 Se logguer à distance avec ssh (linux) (SSH)
23/01 14h52 Accéder à NTFS en écriture (Linux)
23/01 12h32 Installer Linux sans repartitionner (Linux)
06/01 10h02 Utiliser la commande "su" (Linux)
16/12 19h52 Choisir une distribution (Distributions)
29/11 11h47 Mettre une icône dans la barre des taches (Windows)
15/11 18h30 Afficher le contrôle du volume (Windows)
linux ordonnancement taches Plus d'astuces sur « linux ordonnancement taches »

Discussions pertinentes trouvées dans le forum

05/02 17h25 tache programmée linux Tache programmée sur Linux Windows 06/02 10h03->NTVCM2
12/08 09h58 coder lancer taches fond linux Coder et Lancer des taches de fond (linux) Développement 12/08 10h59->francois1
05/02 17h25 tache profgrammée linux Tache profgrammée sur Linux Développement 05/02 17h25->alexandre.ca...0
10/02 21h40 barre taches probleme de barre de taches Virus/Sécurité 14/02 19h56->salwa523
05/01 12h34 linux répertoire alias Linux - Création d'un répertoire alias Linux/Unix 06/01 00h06->mamiemando2
23/01 23h19 linux qt gratuit [Linux] QT => est-ce encore gratuit ? Linux/Unix 26/01 00h45->Arno592
08/07 12h44 ubuntu debuter linux [ubuntu] debuter sous Linux Linux/Unix 15/10 16h07->green day81
06/09 23h22 linux Pourquoi Linux? Linux/Unix 11/09 19h54->teutates75
27/01 23h06 linux windows tous cassé [linux et windows] tous cassé Linux/Unix 29/01 14h49->lami20j48
11/12 13h48 linux future Linux, Le future??? Linux/Unix 21/12 13h59->Max_B48
Discussion fermée Problème résolu linux ordonnancement taches Plus de discussions sur « linux ordonnancement taches »

Ce document intitulé « Linux - Ordonnancement des taches » issu de l'encyclopédie informatique Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.