Cron et crontab : le planificateur de tâches !
Table des matières
Crontab est un outil qui permet de lancer des applications de façon régulière, pratique pour un serveur pour y lancer des scripts de sauvegardes, etc.
Bien que par défaut, il soit souvent installé, voici les commandes pour l'installer sur les différentes distributions
Pour être autorisé à utiliser la commande crontab, il faut que l'utilisateur soit présent dans le groupe cron.
Les fichiers /etc/cron.allow et /etc/cron.deny permettent de définir les droits d'utilisation sur crontab.
Si le fichier /etc/cron.allow existe, alors vous devez être présent dans ce fichier pour être autorisé à utiliser cette commande. Si le fichier /etc/cron.allow n'existe pas mais que /etc/cron.deny existe, alors vous ne devez pas être mentionné dans le fichier /etc/cron.deny afin de pouvoir utiliser cette commande.
Je conseille de ne créer qu'un seul des deux fichiers et ensuite placer le nom des utilisateurs auxquels vous voulez donner/refuser l'accès à la commande crontab.
Pour afficher le contenu du fichier crontab :
Pour supprimer toutes les actions du fichier crontab :
Pour éditer les actions du fichier crontab :
Le crontab s'ouvre avec un éditeur par défaut. Sous Fedora, c'est vi. Si on veut utiliser nano :
La syntaxe à utiliser est précise.
Voici de manière schématique la syntaxe à respecter d'un crontab:
Le fichier de configuration de est constitué des différentes lignes. Chaque ligne correspond à une action.
Prenons l'exemple suivant :
Pour chaque unité, on peut utiliser les notations suivantes :
Bonus, on a des alias rapides tels que @reboot qui vont nous permettre de lancer une commande au boot de la machine. La syntaxe sera la suivante :
Exécution tous les jours à 22h00 d'une commande et rediriger les infos dans sauvegarde.log :
Exécution d'une commande toutes les 6 heures :
Exécution d'une commande toute les heures :
Exécution d'une commande toutes les minutes uniquement les lundis :
Exécution d'une commande une fois par an à une heure précise (ici le 25 décembre à 00h15) :
Exécuter chaque jour, de chaque mois à 2:15 la commande eix-sync
Par défaut, cron envoie un message à l'utilisateur qui a planifié sa tâche.
Pour ne pas envoyer de façon automatique ce message à l'utilisateur (ou [email protected] si un agent tel que postfix a été configuré) il faut indiquer sur la première ligne du crontab -e
Introduction
Crontab est un outil qui permet de lancer des applications de façon régulière, pratique pour un serveur pour y lancer des scripts de sauvegardes, etc.
L'installation
Bien que par défaut, il soit souvent installé, voici les commandes pour l'installer sur les différentes distributions
Debian
Code BASH :
apt-get install cron
Fedora/CentOS
Code BASH :
yum install cronie
Gentoo
Code BASH :
emerge -av sys-process/cronie
La configuration
Pour être autorisé à utiliser la commande crontab, il faut que l'utilisateur soit présent dans le groupe cron.
Les fichiers /etc/cron.allow et /etc/cron.deny permettent de définir les droits d'utilisation sur crontab.
Si le fichier /etc/cron.allow existe, alors vous devez être présent dans ce fichier pour être autorisé à utiliser cette commande. Si le fichier /etc/cron.allow n'existe pas mais que /etc/cron.deny existe, alors vous ne devez pas être mentionné dans le fichier /etc/cron.deny afin de pouvoir utiliser cette commande.
Je conseille de ne créer qu'un seul des deux fichiers et ensuite placer le nom des utilisateurs auxquels vous voulez donner/refuser l'accès à la commande crontab.
Utiliser la commande crontab
Afficher la liste des actions
Pour afficher le contenu du fichier crontab :
Code BASH :
crontab -l
Supprimer toutes les actions
Pour supprimer toutes les actions du fichier crontab :
Code BASH :
crontab -r
Editer les actions
Pour éditer les actions du fichier crontab :
Code BASH :
crontab -e
Le crontab s'ouvre avec un éditeur par défaut. Sous Fedora, c'est vi. Si on veut utiliser nano :
Code BASH :
export EDITOR=nano crontab -e
La syntaxe à utiliser est précise.
Guide de survie de crontab : les syntaxes
Voici de manière schématique la syntaxe à respecter d'un crontab:
Code :
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user command to be executed
Le fichier de configuration de est constitué des différentes lignes. Chaque ligne correspond à une action.
Prenons l'exemple suivant :
Code BASH :
mm hh jj MMM JJJ [user] tâche > log
- mm : minutes (00-59).
- hh : heures (00-23) .
- jj : jour du mois (01-31).
- MMM : mois (01-12 ou abréviation anglaise sur trois lettres : jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec).
- JJJ : jour de la semaine (1-7 ou abréviation anglaise sur trois lettres : mon, tue, wed, thu, fri, sat, sun).
- user (facultatif) : nom d'utilisateur avec lequel exécuter la tâche.
- tâche : commande à exécuter.
- > log (facultatif) : redirection de la sortie vers un fichier de log. Si un fichier de log n'est pas spécifié, un mail sera envoyé à l'utilisateur local.
Pour chaque unité, on peut utiliser les notations suivantes :
- 1-5 : les unités de temps de 1 à 5.
- */6 : toutes les 6 unités de temps (toutes les 6 heures par exemple).
- 2,7 : les unités de temps 2 et 7.
Bonus, on a des alias rapides tels que @reboot qui vont nous permettre de lancer une commande au boot de la machine. La syntaxe sera la suivante :
Code BASH :
@reboot tâche > log
Exemples
Exécution tous les jours à 22h00 d'une commande et rediriger les infos dans sauvegarde.log :
Code BASH :
00 22 * * * /root/scripts/sauvegarde.sh >> sauvegarde.log
Exécution d'une commande toutes les 6 heures :
Code BASH :
00 */6 * * * /root/scripts/synchronisation-ftp.sh
Exécution d'une commande toute les heures :
Code BASH :
00 */1 * * * /usr/sbin/ntpdate fr.pool.ntp.org
Exécution d'une commande toutes les minutes uniquement les lundis :
Code BASH :
* * * * 1 /root/script/commandes-du-lundi.sh
Exécution d'une commande une fois par an à une heure précise (ici le 25 décembre à 00h15) :
Code BASH :
15 00 25 12 * echo "Le père Noël est passé !"
Exécuter chaque jour, de chaque mois à 2:15 la commande eix-sync
Code BASH :
15 02 * * * /usr/bin/eix-sync
Envoi de mail
Par défaut, cron envoie un message à l'utilisateur qui a planifié sa tâche.
Pour ne pas envoyer de façon automatique ce message à l'utilisateur (ou [email protected] si un agent tel que postfix a été configuré) il faut indiquer sur la première ligne du crontab -e
Code BASH :
MAILTO=""