Math-Linux.com

Knowledge base dedicated to Linux and applied mathematics.

Accueil > Linux > Commande du jour > Programmation des actions(tâches) régulières : crontab

Programmation des actions(tâches) régulières : crontab

Toutes les versions de cet article : [English] [français]

Crontab permet de programmer des tâches régulières sur votre poste. Vous pouvez par exemple décider de programmer une sauvegarde tous les 13 du mois , ou bien réaliser des tâches administratives tels que le lancement de tâches system (vérification de mail, extinctions de postes du réseau, etc...).

Remarquons tout d’abord que crontab se distingue par rapport à l’utilitaire at, en effet crontab permet de programmer des tâches régulières, c’est à dire répétitives, alors que at n’exécute qu’une seule et unique tâche.

Autoriser un utilisateur(user) à utiliser crontab

Mon nom d’utilisateur c’est nadir, il faut tout d’abord autoriser nadir à utiliser la commande crontab. On se met en root, et on regarde si le fichier /etc/cron.allow existe. S’il existe on ajoute l’utilisateur nadir dans le fichier, s’il n’existe pas le créer et mettre nadir. En pratique :

root@ipower:~# nano -w /etc/cron.allow

ou bien utiliser (vi,gedit, nedit, kwrite, etc...)
et remplissez le fichier en conséquence.

Bon maintenant nous avons autoriser l’utilisateur(user) nadir à utiliser crontab. Il est donc possible de spécifier des utilisateurs (users) ayant le droit d’utiliser crontab ou ceux n’ayant pas le droit d’utiliser cette commande. On utilise pour cela les fichiers /etc/cron.allow and
/etc/cron.deny.

Si le fichier /etc/cron.allow existe, seul les utilisateurs mentionnés auront le droit d’utiliser la commande cron.

Si le fichier /etc/cron.allow n’existe pas, c’est le fichier
/etc/cron.deny qui est pris en compte : les utilisateurs mentionnés n’auront pas le droit d’utiliser la commande cron.

Si aucun des deux fichiers n’existe, seul le super utilisateur (root) aura le droit d’utiliser la commande cron.

Remarque : un fichier /etc/cron.deny vide signifie que tout les utilisateurs peuvent utiliser la commande cron.

Utilisation de crontab

Maintenant que j’ai autorisé l’utilisateur(user) nadir, ce dernier va pouvoir utiliser crontab.
à€ l’aide de l’option crontab -l, je vais lister les tâches en cours :

nadir@ipower:~$ crontab -l
no crontab for nadir

On voit clairement que je n’ai pas défini de tâche. C’est le moment o๠jamais !

Dans un premier temps, on crée un fichier de tâches

nadir@ipower:~$ crontab -e

Il faut à présent le remplir. La syntaxe est la suivante :
m h dom mon dow command
- m pour minute(minute) comprise entre 0 et 59
- h pour hour(heure) comprise entre 0 et 23
- dom pour day of month(jour du mois) comprise entre 1 et 31
- mon pour month(mois) comprise entre 1 et 12
- dow pour day of week(jour de la semaine) comprise entre 0 et 7, le dimanche étant 0 ou 7, le lundi 1, etc ...
- command pour la commande ou la suite de commande à exécuter.

Regardons à présent, quelques caractères spéciaux (métacaractères) :
- * si l’un des champs m h dom mon dow
possède le caractère *, alors cela indique qu’il s’agit de toutes les minutes ou de toutes les heures ou tous les jours du mois ou tous les mois ou tous les jours de la semaine, cela dépend du champ o๠est placé *.
- / permet de spécifier une répétition.
- - permet de définir une plage.
- , pour spécifier plusieurs valeurs.

Voici quelques exemples :

*/5 * * * * commande permet d’exécuter une commande toutes les cinq minutes.

0 22 * * 1-5 commande permet d’exécuter une commande tous les jours de la semaine du lundi ou vendredi à 22h.

17 19 1,15 * * commande veut dire les premier et quinzième du mois à 19h17

23 0-16/2 * * * commande signifie toutes les 2 heures à la 23ième minute, entre minuit et 16 heures.

Il y a également des chaà®nes de caractères spéciales :

Chaà®ne Action
@reboot exécution une fois au démarrage
@yearly exécution une fois par an, "0 0 1 1 *"
@annually exécution une fois par an, "0 0 1 1 *"
@monthly exécution une fois par mois, "0 0 1 * *"
@weekly exécution une fois par semaine, "0 0 * * 0"
@daily exécution une fois par jour, "0 0 * * *"
@midnight execution une fois par jour, "0 0 * * *"
@hourly execution une fois par heure, "0 * * * *"

A vous de jouer !

Un message, un commentaire ?

comments powered by Disqus