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 daemoncrond
doit 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é
systemd
dont le nom se termine par.timer
et qui contrôlent des fichiers ou des événements.service
. - peuvent être utilisés comme une alternative à
cron
et 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)