La crontab (table cron) est utilisée pour automatiser tous les types de tâches sur les systèmes Linux.
Il s’agit d’une compétence particulièrement importante à acquérir pour les administrateurs système en herbe. La prise en main de la crontab peut s’avérer difficile pour les débutants. La syntaxe est différente de celle de la plupart des autres commandes.
C’est pourquoi cette leçon comprendra un peu plus d’informations de base avant de vous montrer certaines de ses utilisations.
Tous les exemples et explications fonctionnent sur les différentes distributions Linux telles que Ubuntu, Debian, Fedora, Linux Mint et autres.
Qu’est-ce que crontab
Crontab est un processus démon qui tourne en arrière-plan sur presque toutes les machines Linux et qui est utilisé pour planifier et exécuter des tâches automatisées à des intervalles de temps déterminés. Il est également souvent utilisé par les développeurs de logiciels pour exécuter des tâches fastidieuses en arrière-plan.
Il peut s’agir de n’importe quoi, y compris, mais sans s’y limiter, l’envoi de courriels par lots, la consultation de votre fil Twitter, l’exécution de sauvegardes ou simplement l’exécution d’un rappel.
Voici les trois composants du système cron dans Linux :
Elément | Nom | Signification |
---|---|---|
Daemon | crond | Prononcé “demon” ou “day-mon”. Il s’agit de processus d’arrière-plan du système Linux. |
Table | crontab | Vous écrivez des lignes dans ce tableau lorsque vous entrez une commande crontab. Chaque astérisque “*” représente un segment de temps et une colonne correspondante dans chaque ligne. |
Job | Cron Job | La tâche spécifique à effectuer est décrite dans une ligne, associée à l’heure à laquelle elle doit être effectuée. |
Comprendre la syntaxe de crontab
Chaque tâche crontab se compose d’une ligne et est formatée comme suit :
crontab [options]
* * * * * <commande>
OU
* * * * * <chemin/du/script>
Comme vous pouvez le voir, la syntaxe de la crontab comporte 5 astérisques qui représentent un champs dans le tableau de cron.
Voici ce que chacune de ces astérisques représente :
1er | 2eme | 3eme | 4eme | 5eme | |
---|---|---|---|---|---|
* | * | * | * | * | |
ID | Minute | Heure | Jour/Date | Mois | Nom du Jour |
Valeur | 0-59 | 0 -23 | 1-31 | 1-12 | 0-6 |
Pour bien comprendre la syntaxe de crontab, voici une autre syntaxe que l’on pourrait utiliser :
mm hh jj MMM JJJ <commande>
Mettons cela rapidement en pratique. Si vous avez une crontab comme celle ci-dessous, quand pensez-vous que la tâche sera exécutée ?
Comment modifier le crontab d’un utilisateur Linux
Chaque utilisateur peut avoir son cron, pour cela, il vous suffit de se loguer avec votre utilisateur et de taper la commande
Pour modifier l’entrée crontab d’un utilisateur, on utilise l’option -e :
crontab -e
Comme je n’ai pas encore créé de crontab, lorsque j’utilise -e pour éditer le tableau, on me demande mon éditeur de texte préféré. Nano est suggéré comme le programme le plus facile à utiliser. Vous pouvez utiliser n’importe quel éditeur de texte en ligne de commande comme Vim ou Emacs. C’est à vous de décider.
crontab -e
pas de crontab pour malekalmorte - utilisation d'une crontab vide
Sélectionnez un éditeur. Pour changer plus tard, exécutez 'select-editor'.
1. /bin/nano <---- le plus simple
2. /usr/bin/code
3. /bin/ed
Choisissez 1-3 [1] : 1
Vous pouvez aussi forcer l’éditeur de crontab en modifiant la variable EDITOR ou VISUAL avec la commande export :
export EDITOR=vi
Exemples de crontab pour planifier l’exécution d’une tâche
Exécuter une commande à une date précise
Par exemple, la tâche crontab ci-dessous s’exécutera tous les soirs à 3h20 exactement :
20 3 * * * /root/backup.sh
Maintenant, voici plusieurs exemples afin de bien comprendra la syntaxe cron :
01 * * * * root echo "cette commande est exécutée toutes les heures passées d'une minute"
17 8 * * * root echo "Cette commande est exécutée tous les jours à 08h17"
17 20 * * * root echo "Cette commande est exécutée tous les jours à 20h17"
00 4 * * 0 root echo "Cette commande est exécutée tous les dimanches à 4h00"
42 4 1 * * root echo "Cette commande est exécutée tous les 1er du mois à 4h42"
01 * 19 07 * root echo "Cette commande est exécutée toutes les heures passées d'une minute tous les 19 Juillet"
Mais vous pouvez aussi combiner deux cron pour, par exemple :
Pour lancer une commande tous les lundi 16 du mois à 12h00 vous pouvez spécifiez :
* 12 16 * Mon root commande
* 12 16 * * root commande
* 12 * * Mon root commande
Utiliser les valeurs multiples
Chaque période peut également comprendre plusieurs éléments. Vous pouvez spécifier les valeurs exactes en les séparant par une virgule,
Vous pouvez aussi lister des champs de la forme 1,2,3 ce qui signifie 1 et 2 et 3.
Ici, une syntaxe équivalente est 1-3.
Voici un autre exemple cron qui démarre le script backup.sh à 11h59 le lundi, mardi, mercredi, jeudi et vendredi.
59 11 * * 1,2,3,4,5 root commande
59 11 * * 1-5 root commande
Lancer une commande/script à intervalle régulier
Une valeur comme */2 dans les jours signifie que la commande sera lancée toutes les deux jours.
et */5 dans les heures signifie que la commande sera lancée toutes les 5 heures.
Exemples avec les équivalents :
* 12 10-16/2 * * root commande
* 12 10,12,14,16 * * root commande
*/15 9-17 * * * root commande
Ainsi les listes peuvent être combinées les unes avec les autres.
Cela lance la commande cmd tous les lundi entre le 1er et le 15 et entre le 20 et 25 du mois (inclus) et le 17 de tous les mois.
* 12 1-15,17,20-25 * * root commande
* 12 10-16/2 * * root commande
* 12 10,12,14,16 * * root commande
L’utilisation des jours n’est pas case sensitive, vous devez spécifiez les 3 premières lettres, ex: Mon, sun or Mar, jul.
Comment rediriger la sortie cron
Comme nous l’avons vu les sorties cron vont par mail à l’utilisateur spécifié dans la variable MAILTO mais vous pouvez aussi supprimer ou rediriger les sorties.
Par exemple avec la syntaxe suivante, vous pouvez renvoyer un mail à l’utilisateur désiré
cmd | mail -s "Sujet du mail" <utilisateur>
Vous pouvez rediriger la sortie (par exemple vers /dev/null si vous n’en voulez vraiment pas ) ou dans un fichier de log en utilisant la syntaxe suivante :
cmd >> log.file
Ceci redirige la sortie standard et non les erreurs, pour rediriger les erreurs, vous devez utiliser la syntaxe suivante :
cmd >> logfile 2>&1
Note : en spécifiant deux > cela recréé le fichier logfile à chaque exécution de la commande.
Si vous spécifiez un seul >> le fichier sera pas écrasé à chaque exécution vous garderez donc les logs depuis la première exécution du fichier.
Vous pouvez aussi envoyer le fichier de log par mail en créant une nouvelle entrée cron, avec la syntaxe suivante :
mail -s "Fichier de Log" <log.file
Garder les tâches crontab silencieuses
Selon les cas, vous voudrez peut-être éliminer toutes les sorties des tâches crontab afin qu’elles ne se retrouvent pas dans le dossier de courrier électronique de votre système. Vous pouvez le faire en ajoutant > /dev/null 2>&1 à n’importe quelle tâche crontab.
Par exemple :
0 6 15 * * /chemin/vers/backup.sh > /dev/null 2>&1
Comment exécuter un script automatiquement avec crontab
crontab vous permet d’exécuter n’importe quoi, une commande, un script.
Il y a tout de même quelques règles à respecter :
- L’utilisateur doit avoir la permission d’exécution que vous pouvez donner à l’aide de la commande chmod +x
- Dans crontab, spécifiez le chemin complet du script
Par exemple pour exécuter un script de sauvegarde :
0 3 * * * ~/scripts/backup_script.sh
Par défaut, crontab utilise le shell /bin/sh dont la configuration se trouve dans /etc/crontab.
Si nécessaire, vous pouvez forcer le shell Linux. Par exemple pour forcer l’exécution du script en bash :
0 3 * * * bash ~/scripts/backup_script.sh
Par exemple pour exécuter un script PHP de vérification de sites :
*/5 * * * * /usr/bin/php /home/malekalmorte/script/check_sites.php > /dev/null 2>&1
Comment lister les tâches et supprimer du fichier Crontab
Vous pouvez dresser la liste de tous les travaux actuellement actifs dans votre fichier crontab à l’aide de la commande :
crontab -l
Vous pouvez également supprimer toutes les tâches de la crontab et vider le contenu de votre fichier crontab à l’aide de la commande :
crontab -r
Enfin l’utilisateur administrateur root peut modifier ou lister le cron d’un utilisateur avec le paramètre -u :
crontab -u malekalmorte -l
crontab -u malekalmorte -e
Le système d’exploitation stocke le cron utilisateur dans /var/spool/cron/crontabs/.
On trouve un dossier pour chaque utilisateur Linux.
Les options crontab
L’entrée crontab peut aussi prendre des options qui se placent en début.
Voici un exemple avec des options :
#commentaires
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# m h dom mon dow user command
17 * * * * root run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
47 6 * * 7 root test -x /usr/sbin/anacron || run-parts --report /etc/cron.weekly
52 6 1 * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.monthly
Les explications :
- SHELL est le shell dans lequel sera executé cron. Si ce dernier n’est pas spécifié, l’entrée de l’utilisateur sera prise par défaut dans le fichier /etc/passwd
- PATH contient les répertoires dans où les programmes seront recherchés. Si par exemple vous avez un programme ‘foo’ dans le répertoire /usr/cog/bin/ si vous ne voulez pas à chaque fois devoir taper /usr/cog/bin/foo pour lancer le programme, vous devez ajouter le chemin /usr/cog/bin dans votre PATH
- MAILTO si une commande est lancée avec une sortie, un mail sera envoyé à cet utilisateur. Si aucun MAILTO n’est pas spécifiée, la sortie sera envoyée par mail au propriétaire de la commande qui a généré la sortie
- HOME est le répertoire home de cron. Si aucun n’est spécifiée, ce sera l’entrée de /etc/passwd qui sera prise
Liens
- Systemd : Configuration et fonctionnement des services Linux (daemon)
- Comment fonctionnement les services init.d Linux
- Comment créer un service Linux (systemd)
- Systemctl Linux : utilisation et exemples
- Comment démarrer, arrêter, redémarrer un service sur Linux
- Comment utiliser journalctl pour voir les journaux Linux dans systemd
- Quels sont les journaux Linux de /var/log/ et comment les lire
- Crontab et cron Linux : utilisations et exemples
L’article Crontab et cron Linux : utilisations et exemples est apparu en premier sur malekal.com.
0 Commentaires