Cron
est l'un des UNIXismes les plus reconnaissables du monde informatique. Même les informaticiens qui n'administrent pas les serveurs Linux ont entendu parler de cette bête mystérieuse, le "travail cron". Et les administrateurs Linux savent que les tâches cron sont infiniment utiles. En fait, on peut soutenir que le cron
système a été l'un des premiers précurseurs de l'engouement pour l'automatisation. S'il y avait quelque chose que vous saviez qu'un humain pouvait oublier de faire, cron
était la réponse.
Cependant, où cron
excels est la répétition, et parfois vous n'avez pas besoin d'un travail pour exécuter toutes les heures ou tous les jours ou toutes les semaines. Vous avez juste besoin qu'un travail soit exécuté dans les délais, et définir une alarme pour vous le rappeler ne ressemble tout simplement pas à la méthode UNIX. Ce dont vous avez besoin est le at
command, un petit utilitaire que vous pouvez utiliser pour créer une file d'attente de travaux programmés pour s'exécuter at un moment précis dans le futur.
Configuration
Avant d'utiliser le at
commande, vous devez avoir un script shell que vous souhaitez lancer à un moment donné. Comme d'habitude, votre script doit avoir une ligne "cookie magique" ou "shebang" en haut du fichier pour définir le shell à utiliser pour son exécution.
Pour cet exemple, créez un script simple qui crée un fichier dans /tmp
:
#!/bin/sh
DATE=`date --utc +%s`
echo "hello world $DATE" | tee /tmp/at.log
exit 0
Rendez le script exécutable, puis testez-le :
$ chmod +x test.sh
$ ./test.sh
Afficher le contenu du /tmp/at.log
archivez le script créé :
$ cat /tmp/at.log
hello world 1588482185
Planifier une tâche
Vous pouvez planifier une tâche à l'aide d'un horodatage ou en langage naturel. Si vous utilisez du langage naturel ou des formats d'heure simples, aucune option n'est requise avant de spécifier l'heure.
Par exemple, pour planifier test.sh
pour s'exécuter immédiatement, vous pouvez simplement utiliser le mot-clé now
:
$ at now -f test.sh
warning: commands will be executed using /bin/sh
job 1 at Mon Feb 24 01:23:00 2020
$ cat /tmp/at.log
hello world 1588482620
Vous pouvez définir un décalage à partir de maintenant en utilisant minutes
, hours
, days
, weeks
, ou years
.
$ at now + 1 day -f test.sh
warning: commands will be executed using /bin/sh
job 2 at Tue Feb 25 01:27:00 2020
Les years
le mot-clé n'est pas documenté et seconds
n'est pas pris en charge. Vous pouvez également spécifier des heures communes, telles que midnight
, noon
, et teatime
(il est 16h00).
Les temps simples fonctionnent aussi :
$ at 21:12 -f test.sh
warning: commands will be executed using /bin/sh
job 3 at Mon Feb 24 21:12:00 2020
Pour programmer une date calendaire à une heure précise, vous devez utiliser le -t
option et tout format d'heure compatible POSIX. Par exemple, en utilisant le format AAAAMMJJHHMM :
$ at -t 202003141509 -f test.sh
warning: commands will be executed using /bin/sh
job 4 at Sat Mar 14 15:09:00 2020
[ Vous recherchez une automatisation système plus avancée ? Démarrez avec The Automated Enterprise, un livre gratuit de Red Hat. ]
Tuyaux
Vous pouvez envoyer des commandes à at
via un tube UNIX :
$ echo "hello world" > /tmp/at.log | at now
warning: commands will be executed using /bin/sh
job 5 at Mon Feb 24 01:28:00 2020
$ cat /tmp/at.log
hello world
Tâches par lots
Le batch
commande (ou at -b
) exécute une commande dès que les ressources système le permettent. Si la charge de votre système est élevée, vous pouvez utiliser batch
pour mettre en file d'attente votre travail à exécuter lorsqu'il y a des cycles CPU à épargner.
$ echo "Cycles to spare" > /tmp/at.log | batch
warning: commands will be executed using /bin/sh
job 5 at Mon Feb 24 01:31:00 2020
Affichage de votre file d'attente
Le atq
la commande affiche votre at
file d'attente. Cela vous donne l'ID du travail, l'heure à laquelle chaque travail est programmé pour s'exécuter, la file d'attente dans laquelle chaque travail est regroupé (a
pour le at
file d'attente ou b
pour le batch
file d'attente) et le nom d'utilisateur du propriétaire de la file d'attente. Le propriétaire de la file d'attente est généralement vous-même, sauf si vous exécutez atq
en tant que root, auquel cas vous voyez tous les at
de l'utilisateur files d'attente.
$ atq
2 Tue Feb 25 01:27:00 2020 a seth
3 Mon Feb 24 21:12:00 2020 a seth
4 Sat Mar 14 15:09:00 2020 a seth
5 Mon Feb 24 01:31:00 2020 b seth
Vous pouvez créer et nommer vos propres files d'attente en utilisant n'importe quel caractère unique c-z ou A-Z . Les deux a
et b
sont des désignations réservées pour at
et batch
, et toute file d'attente avec une lettre majuscule est traitée comme un batch
travail. Files d'attente dont les noms suivent alphabétiquement a
et b
sont exécutés avec une gentillesse croissante.
Aperçu de votre travail
Lorsque vous envoyez une commande ou un script à at
, votre répertoire de travail actuel, environnement (à l'exception de BASH_VERSINFO
, DISPLAY
, EUID
, GROUPS
, SHELLOPTS
, TERM
, UID
, et _
), et les umask sont conservés. Si votre commande attend des paramètres d'environnement spécifiques, vous devez les définir en passant la commande à at
ou remplacez-les dans votre script.
Pour voir comment votre commande va s'exécuter, utilisez le -c
option avec le numéro de travail :
$ at -c 4
#!/bin/sh
# atrun uid=1006 gid=1006
# mail seth 0
umask 22
CPLUS_INCLUDE_PATH=/usr/lib64/qt/include; export CPLUS_INCLUDE_PATH
MANPATH=/usr/local/man:/usr/man:/usr/lib64/adoptopenjdk12.0.2/man; export MANPATH
KDE_MULTIHEAD=false; export KDE_MULTIHEAD
[...]
Suppression de tâches
Vous pouvez supprimer les travaux en attente de votre at
file d'attente à l'aide de atrm
commande et l'ID du travail. Si vous ne connaissez pas l'ID du travail, utilisez atq
pour afficher votre file d'attente en premier.
$ atq
6 Fri Jan 01 00:00:00 2038 a seth
$ atrm 6
$ atq
Planification avec at
Le at
la commande est un peu comme un petit cron
système. C'est utile pour l'exécution d'une commande unique et c'est facile à utiliser. Si vous avez utilisé cron
ou sleep
pour décaler le temps d'exécution d'une commande, regardez at
et batch
.
[ Besoin d'en savoir plus sur l'administration système Linux ? Envisagez de suivre un cours d'administration système Red Hat. ]