Cron et crontab : le planificateur de tâches !
Table des matières
Crontab est un outil qui permet de lancer des tâches de façon régulière sur les systèmes Linux.
On pourra donc programmer l'exécution de scripts ou de commandes ce qui est pratique pour un serveur pour y lancer des scripts de sauvegardes, ou d'autres automatismes par exemple.
Cron est le démon (service) qui va se charger d'exécuter les planifications. Ces planifications sont saisies dans un fichier de configuration.
Crontab est ce fameux fichier de configuration. Il est propre à chaque utilisateur.
Le super utilisateur root possède un crontab mais n'importe quel utilisateur du système également. Évidemment, par défaut, les commandes lancées dans le crontab d'un utilisateur se lancent avec les droits de celui-ci.
Bien que par défaut, le service est souvent installé, voici les commandes pour l'installer sur les différentes distributions Linux.
Debian et Ubuntu :
Fedora, RHEL (et dérivées) :
Gentoo :
Les fichiers /etc/cron.allow et /etc/cron.deny permettent de définir les droits d'utilisation sur crontab.
Si le fichier /etc/cron.deny existe, alors vous ne devez pas être mentionné dans le fichier /etc/cron.deny afin de pouvoir utiliser cette commande.
Si le fichier /etc/cron.allow existe, alors vous devez être présent dans ce fichier pour être autorisé à utiliser cette commande.
Si aucun fichier n'existe, seul root peut planifier des tâches et dans tous les cas root peut planifier des tâches.
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. Généralement, c'est le fichier cron.deny qui est présent par défaut.
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 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 tous les premier du mois à minuit :
Exécution d'une commande une fois par an à une heure précise (ici le 25 décembre à 00h15) :
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 tâches de façon régulière sur les systèmes Linux.
On pourra donc programmer l'exécution de scripts ou de commandes ce qui est pratique pour un serveur pour y lancer des scripts de sauvegardes, ou d'autres automatismes par exemple.
A propos de cron et crontab
Cron est le démon (service) qui va se charger d'exécuter les planifications. Ces planifications sont saisies dans un fichier de configuration.
Crontab est ce fameux fichier de configuration. Il est propre à chaque utilisateur.
Le super utilisateur root possède un crontab mais n'importe quel utilisateur du système également. Évidemment, par défaut, les commandes lancées dans le crontab d'un utilisateur se lancent avec les droits de celui-ci.
L'installation
Bien que par défaut, le service est souvent installé, voici les commandes pour l'installer sur les différentes distributions Linux.
Debian et Ubuntu :
Code BASH :
sudo apt install cron
Fedora, RHEL (et dérivées) :
Code BASH :
sudo dnf install cronie
Gentoo :
Code BASH :
sudo emerge -av sys-process/cronie
La configuration
Les fichiers /etc/cron.allow et /etc/cron.deny permettent de définir les droits d'utilisation sur crontab.
Si le fichier /etc/cron.deny existe, alors vous ne devez pas être mentionné dans le fichier /etc/cron.deny afin de pouvoir utiliser cette commande.
Si le fichier /etc/cron.allow existe, alors vous devez être présent dans ce fichier pour être autorisé à utiliser cette commande.
Si aucun fichier n'existe, seul root peut planifier des tâches et dans tous les cas root peut planifier des tâches.
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. Généralement, c'est le fichier cron.deny qui est présent par défaut.
Utiliser la commande crontab
Pour afficher le contenu du fichier crontab :
Code BASH :
crontab -l
Pour supprimer toutes les actions du fichier crontab :
Code BASH :
crontab -r
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
Guide de survie de crontab : les syntaxes
La syntaxe à utiliser est précise.
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 est constitué des différentes lignes. Chaque ligne correspond à une action.
Prenons l'exemple suivant :
Code BASH :
mm hh jj MMM JJJ 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).
- 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 tous les premier du mois à minuit :
Code BASH :
00 00 1 * * /server/lets-encrypt.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é !"
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=""