Tâches planifiées
at
, cron
et systemd
sont les programme Linux natifs qui permettent de planifier des tâches.
1. Commande at
at
est une commande Unix qui permet de programmer des commandes à n’exécuter qu’une fois – par opposition à cron — à un moment donné. La commande enregistrée hérite de l’environnement courant utilisé au moment de sa définition. Par exemple, pour une exécution de la commande à 05:45 :
echo "touch file.txt" | at 0545
at
dipose d’options telles que :
-
at -l
ouatq
: affiche la liste des jobs introduits par la commande “at”. -
at -r <JOB>
ouatrm <JOB>
: efface le job identifié par son numéro de job. -
at
: sans paramètre, donne la ligne “Garbled time”.
1.1. créer une tâche planifiée
Voici une procédure courante pour créer un job avec at
.
Vérifier le moment :
date
dim jun 6 11:58:42 CEST 2021
Créer une tâche pour 12h00 :
at 1200
at> echo $(date) >> now.txt
at> <CTRL-D>
job 1 at Sun Jun 6 12:00:00 2021
Vérifier la programmation :
at -l
1 Mon Jun 7 12:00:00 2021 a francois
Vérification :
date; ls -l now.txt; cat now.txt
dim jun 6 12:01:17 CEST 2021
-rw-rw-r-- 1 francois francois 29 6 jun 12:00 now.txt
dim jun 6 12:00:00 CEST 2021
1.2. supprimer une tâche planifiée
Vérification de la tâche :
atq
1 Mon Jun 7 12:00:00 2021 a francois
Suppression de la tâche :
atrm 1
Nouvelle vérification de la tâche :
atq
2. Cron
Le logiciel utilitaire ‘Cron’ est un planificateur de tâches basé sur le temps dans les systèmes de type Unix. On utilise cron
pour planifier des tâches (commandes ou les scripts shell) pour les exécuter périodiquement à des heures fixes, à des dates ou dans des intervalles. Le nom “cron” vient du mot grec pour le temps, χρόνος (chronos).
cron.d
est normalement lancé comme service.
Le programme crontab
permet aux utilisateurs de gérer leurs tâches.
2.1. Répertoire /etc/cron*
Placer un script dans l’un de ses répertoires l’exécute à un moment prédéfini :
ls /etc/cron*
/etc/cron.deny /etc/crontab
/etc/cron.d:
0hourly raid-check sysstat unbound-anchor
/etc/cron.daily:
0yum-daily.cron logrotate man-db.cron mlocate
/etc/cron.hourly:
0anacron 0yum-hourly.cron
/etc/cron.monthly:
/etc/cron.weekly:
2.2. Service cron
Sous Centos 7, on trouvera un service crond.service
:
sudo systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since sam 2021-06-05 12:32:45 CEST; 23h ago
Main PID: 1062 (crond)
Tasks: 1
CGroup: /system.slice/crond.service
└─1062 /usr/sbin/crond -n
2.3. Fichier /etc/crontab
Le fichier /etc/crontab
nous indique la structure d’une commande plannifiée.
cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# 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-name command-to-be-executed
2.4. Commande crontab
Pour gérer son gestionnaire des tâches planifiées, on lance la commande crontab -e
qui utilise l’éditeur par défaut :
crontab -e
et insérer ceci pour lancer un script à chaque minute :
# 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-name command to be executed
* * * * * /home/francois/job1.sh
Vérifier les jobs programmés :
crontab -l
Créer un script du type :
#!/bin/bash
# job1.sh
touch /home/francois/cron-$(date +"%Y%H%M")
exit
Vérifier avec :
ls -l ~/cron*
2.5. Champs dates et heures
Champs | valeurs autorisées |
---|---|
minute | 0-59 |
hour | 0-23 |
day of month | 1-31 |
month | 1-12 (ou les noms en anglais) |
day of week | 0-7 (0 or 7 est aussi dimanche ou les noms des jours) |
Les trois premières lettres des noms des mois et des jours de la semaine correspondent aux termes anglais quelle que soit la casse.
2.6. Valeurs numériques
On peut écrire des plages de valeurs (inclusif) :
8-11
On peut écrire des listes de plages :
1,2,5,9
ou
0-4,8-12
Une valeur suivie de “/<nombre>
” correspond à une cadence. Cet exemple correspond à une cadence tous les 2 de 0 à 23 (on suppose un exemple sur l’heure) :
0-23/2
L’alternative aurait été :
0,2,4,6,8,10,12,14,16,18,20,22
S’il s’agit d’une cadence de “tous les deux” temps, il est peut-être plus évident d’écrire ceci :
*/2
2.7. Exemples de planification
Chaque jour, 5 minutes après minuit :
5 0 * * *
Le premier jour de chaque mois à 14h15 :
15 14 1 * *
Du lundi au vendredi à 22h :
0 22 * * 1-5
Chaque jour, toutes les deux heures à partir de minuit :
23 0-23/2 * * *
Chaque dimanche à 4h05 :
5 4 * * sun
3. Compteurs systemd
Systemd vous permet de définir des compteurs. Cette fonctionnalité est destinée à fonctionner avec des services mais peut être utilisée pour tout autre chose. Il s’agit d’une alternative puissante à cron.1