Crontab et planification
Les daemons Cron et Anacron servent à planifier l’exécution de tâches récurrentes à un certain moment : une heure exacte, un jour du mois, un jour de la semaine et par une semaine.
Cron
La commande crontab permet de gérer et de planifier des tâches. Pour exécuter des tâches récurentes, il est conseillé de les faire à partir d’un compte système plutôt qu’utilisateur.
Le fichier /etc/crontab donne la syntaxe et il est possible de spécifier l’utilisateur :
SHELL=/bin/bash |
Anacron
Le daemon Anacron permet d’éxécuter une tâche prévue si le système est éteint. La tâche prévue pourra être lancée dès que le système sera de nouveau opérationnel.
La commande run-parts permet d’éxécuter les tâches récurentes à partir du fichier /etc/anacrontab.
Syntaxe de /etc/anacrontab :
Period in days: intervalle en jours pour exécuter la tâcheDelay in minutes: combien de temps le daemoncronddoit attendre avant de démarrer la tâcheJob identifier: identifiant de la tâche dans les logsCommand: commande à exécuter
Exemple :
# /etc/anacrontab: configuration file for anacron |
Minuteur systemd
Les timers (minuteurs)
- sont des fichiers d’unité
systemddont le nom se termine par.timeret qui contrôlent des fichiers ou des événements.service. - peuvent être utilisés comme une alternative à
cronet peuvent être exécutés de façon asynchrone.
Fichier /usr/lib/systemd/system/stat-collect.timer, l’unité OnCalendar=*:00/10 active stat-collect.service toutes les 10 minutes :
[Unit] |
Après avoir modifié le fichier de configuration il faut recharger la configuration et activer l’unité :
# systemctl daemon-reload |
/!\ Résumé des commandes
Commandes :
# crontab -l // Liste les tâches de l'utilisateur actuel |
Fichiers :
/etc/crontab |
Cas Pratiques
Crontab utilisateur
Afficahe de la date et de l’heure actuelle :
[aline@SERVER01~]$ date |
Ainsi que des moments dans le temps :
[aline@SERVER01~]$ date -d "last day" |
Ouverture de la crontab et modification, 5-7 correspond à Friday-Sunday :
[aline@SERVER01~]$ crontab -e |
Lister les tâches :
[aline@SERVER01~]$ crontab -l |
Ouverture du fichier après quelques secondes :
[aline@SERVER01~]$ cat output_date.txt |
Suppression de la crontab :
[aline@SERVER01~]$ crontab -r |
Vérification :
[aline@SERVER01~]$ crontab -l |
Crontab système
Création d’une tâche cron système qui écrit un message indiquant le nombre d’utilisateurs sur le système et l’heure.
Le script /etc/cron.daily/who avec le contenu suivant :
#!/bin/bash |
Changement de chmod :
[root@SERVER02 ~]# chmod +x /etc/cron.daily/who |
Installation du paquet sysstat pour déclencher le service toutes les X min :
[root@SERVER02 ~]# dnf install sysstat |
Copie du fichier /usr/lib/systemd/system/sysstat-collect.timer dans /etc/systemd/system/sysstat-collect.timer :
[root@SERVER02 ~]# cp /usr/lib/systemd/system/sysstat-collect.timer /etc/systemd/system/sysstat-collect.timer |
Modification de /etc/systemd/system/sysstat-collect.timer pour que le minuteur s’exécute toutes les 2min :
[...] |
Reload le service :
[root@SERVER02 ~]# systemctl daemon-reload |
Activer le service :
[root@SERVER02 ~]# systemctl enable --now sysstat-collect.timer |
Le fichier a été créé dans /var/log/sa, la boucle renvoie 0 lorsque le fichier n’existe pas et 1 lorsqu’il existe :
[root@SERVER02 ~]# while [ $(ls /var/log/sa | wc -l) -eq 0 ]; do sleep 1s; done |
Vérification que le fichier a été modifié dans /var/log/sa :
[root@SERVER02 ~]# ls -l /var/log/sa |
Documentation
https://access.redhat.com/documentation/fr-fr/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-automating_system_tasks#s1-autotasks-cron-anacron
http://n0tes.fr/2012/06/29/Cron-et-Crontab/
https://www.thegeekstuff.com/2011/05/anacron-examples/
https://wiki.archlinux.org/title/Systemd_(Fran%C3%A7ais)/Timers_(Fran%C3%A7ais)
MAN crond(8)
MAN crontab(1,5)
MAN anacron(8)
MAN anacrontab(5)
MAN systemd.time(7)
MAN systemd.timer(5)