Si vous souhaitez planifier un travail Linux qui ne se produira qu’une seule fois, cron est exagéré. La famille de commandes at est ce dont vous avez besoin! Et si vous souhaitez exécuter des processus uniquement lorsque votre système dispose de ressources libres, vous pouvez utiliser le traitement par lots.
Table des matières
Comment planifier des travaux Linux
Le démon cron maintient une liste de travaux exécutés à des moments précis. Ces tâches et programmes s’exécutent en arrière-plan aux heures planifiées. Cela vous offre une grande flexibilité pour la planification des tâches qui doivent être répétées. Que vous deviez exécuter une tâche une fois par heure, à une heure précise chaque jour, ou une fois par mois ou par an, vous pouvez la configurer dans cron.
Cependant, cela n’aide pas si vous souhaitez planifier une tâche à exécuter une seule fois. Bien sûr, vous pouvez le configurer dans cron, mais vous devez ensuite vous rappeler de revenir en arrière et de supprimer le entrée crontab après l’exécution de la tâche, ce qui n’est pas pratique.
Avec Linux, si vous êtes aux prises avec un problème, c’est presque une garantie que quelqu’un d’autre a également lutté avec. Heureusement, comme les systèmes d’exploitation de type Unix existent depuis si longtemps, il y a aussi une excellente chance que quelqu’un ait créé une solution à votre problème.
Pour le problème décrit ci-dessus, ils l’ont fait, et c’est appelé.
Installation de la commande at
Nous avons dû installer sur Ubuntu 18.04 et Manjaro 18.1.0 (il était déjà installé sur Fedora 31).
Pour installer sur Ubuntu, utilisez cette commande:
sudo apt-get install at
Une fois l’installation terminée, vous pouvez démarrer le démon at avec cette commande:
sudo systemctl enable --now atd.service
Sur Manjaro, vous installez à avec cette commande:
sudo pacman -Sy at
Une fois l’installation terminée, tapez cette commande pour démarrer le démon at:
sudo systemctl enable --now atd.service
Sur n’importe quelle distribution, vous pouvez taper cette commande pour vous assurer que le démon atd est en cours d’exécution:
ps -e | grep atd
Comment utiliser la commande at de manière interactive
Pour l’utiliser, vous devez lui attribuer une date et une heure d’exécution. Il y a une grande flexibilité dans la façon dont vous pouvez les écrire, ce que nous aborderons plus loin dans cet article.
Cependant, même si nous allons utiliser à de manière interactive, vous devez fournir la date et l’heure à l’avance. Si vous n’incluez rien sur la ligne de commande, ou si vous tapez quelque chose qui n’est pas une date et une heure, at répond par « Heure brouillée », comme indiqué ci-dessous:
at
at banana
Les dates et heures peuvent être explicites ou relatives. Par exemple, disons que vous souhaitez qu’une commande s’exécute dans une minute. at sait ce que signifie «maintenant», vous pouvez donc utiliser maintenant et y ajouter une minute, comme ceci:
at now + 1 minute
at imprime un message et une invite at, et attend que vous saisissiez les commandes que vous souhaitez programmer. Tout d’abord, considérez le message, comme indiqué ci-dessous:
Il vous indique au lancement d’une instance du shell sh et exécuter les commandes à l’intérieur. Vos commandes ne seront pas exécutées dans le shell Bash, qui est compatible avec le shell sh mais possède un ensemble de fonctionnalités plus riche.
Si vos commandes ou scripts essaient d’utiliser une fonction ou une installation fournie par Bash, mais pas sh, ils échoueront.
Il est facile de tester si vos commandes ou vos scripts s’exécuteront dans sh. Utilisez la commande sh pour démarrer un shell sh:
sh
L’invite de commande se transforme en signe dollar ($) et vous pouvez maintenant exécuter vos commandes et vérifier qu’elles fonctionnent correctement.
Pour revenir au shell Bash, tapez la commande exit:
exit
Vous ne verrez aucune sortie standard ou messages d’erreur des commandes. C’est parce que le shell sh se lance en tâche d’arrière-plan et s’exécute sans aucune sorte d’interface d’écran.
Toute sortie des commandes, bonne ou mauvaise, vous est envoyée par e-mail. Il est envoyé via le système de messagerie interne à quiconque exécute la commande at. Cela signifie que vous devez installer et configurer ce système de messagerie interne.
De nombreux systèmes Linux (la plupart) n’ont pas de système de messagerie interne car il en est rarement nécessaire. Ceux qui utilisent généralement un système comme envoyer un mail ou suffixe. Si votre système ne dispose pas d’un système de messagerie interne, vous pouvez faire écrire des scripts dans des fichiers ou rediriger la sortie vers des fichiers pour ajouter une journalisation.
Si la commande ne génère aucune sortie standard ou message d’erreur, vous ne recevrez de toute façon pas d’e-mail. De nombreuses commandes Linux indiquent le succès via le silence, donc dans la plupart des cas, vous ne recevrez pas d’e-mail.
Maintenant, il est temps de taper une commande à. Pour cet exemple, nous utiliserons un petit fichier de script appelé sweep.sh qui supprime les fichiers * .bak, * .tmp et * .o. Tapez le chemin d’accès à la commande, comme indiqué ci-dessous, puis appuyez sur Entrée.
Une autre invite de commande apparaît et vous pouvez ajouter autant de commandes que vous le souhaitez. Il est généralement plus pratique d’avoir vos commandes dans un seul script et d’appeler simplement ce script de l’intérieur à.
Appuyez sur Ctrl + D pour dire que vous avez terminé d’ajouter des commandes. aux spectacles
Une fois le travail exécuté, saisissez ce qui suit pour vérifier votre courrier interne:
S’il n’y a pas de courrier, vous devez assumer le succès. Bien sûr, dans ce cas, vous pouvez vérifier et voir si les fichiers * .bak, * .tmp et * .o ont été supprimés pour confirmer que la commande a fonctionné.
Tapez ce qui suit pour exécuter à nouveau le tout:
at now + 1 minute
Après une minute, saisissez ce qui suit pour revérifier votre courrier:
Hé, nous avons du courrier! Pour lire le message numéro un, appuyez sur 1, puis appuyez sur Entrée.
Nous avons reçu un e-mail de at car les commandes du script ont généré des messages d’erreur. Dans cet exemple, il n’y avait aucun fichier à supprimer car lorsque nous avons exécuté le script précédemment, il les a supprimés.
Appuyez sur D + Entrée pour supprimer l’e-mail et Q + Entrée pour quitter le programme de messagerie.
Formats de date et d’heure
Vous disposez d’une grande flexibilité en ce qui concerne les formats d’heure que vous pouvez utiliser avec at. Voici quelques exemples:
Courir à 11h00:
at 11:00 AM
Courir à 11h00 demain:
at 11:00 AM tomorrow
Exécuter à 11 h 00 ce jour-là la semaine prochaine:
at 11:00 AM next week
Exécutez à ce moment, ce jour-là, la semaine prochaine:
at next week
Courir à 11h00 vendredi prochain:
at 11:00 AM next fri
Exécutez à cette heure vendredi prochain:
at next fri
Exécution à 11 h 00 à cette date, le mois prochain:
at 11:00 AM next month
Exécution à 11h00 à une date précise:
at 11:00 AM 3/15/2020
Exécutez dans 30 minutes à partir de maintenant:
at now + 30 minutes
Exécutez dans deux heures à partir de maintenant:
at now + 2 hours
Courir à cette heure demain:
at tomorrow
Exécutez à cette heure le jeudi:
at thursday
Courir à 12h00:
at midnight
Courir à 12h00:
at noon
Si vous êtes britannique, vous pouvez même programmer une commande à exécuter à l’heure du thé (16 h):
at teatime
Consulter la file d’attente des travaux
Vous pouvez taper la commande atq pour voir la file d’attente des travaux planifiés, comme illustré ci-dessous.
Pour chaque commande de la file d’attente, atq affiche les informations suivantes:
ID de poste
Date prévue
Heure prévue
File d’attente dans laquelle se trouve le travail. Les files d’attente sont étiquetées «a», «b», etc. Les tâches normales que vous planifiez dans la file d’attente «a», tandis que les tâches que vous planifiez avec le lot (traitées plus loin dans cet article) vont dans la file d’attente «b».
La personne qui a planifié le travail.
Utilisation de at sur la ligne de commande
Vous n’avez pas à utiliser à de manière interactive; vous pouvez également l’utiliser sur la commande. Cela facilite l’utilisation de scripts internes.
Vous pouvez diriger des commandes vers at, comme ceci:
echo "sh ~/sweep.sh" | at 08:45 AM
Le travail est accepté et planifié par le au, et le numéro du travail et la date d’exécution sont indiqués comme auparavant.
Utilisation de at avec des fichiers de commandes
Vous pouvez également stocker une séquence de commandes dans un fichier, puis la transmettre à at. Cela peut être un fichier de commandes en texte brut – il n’est pas nécessaire qu’il s’agisse d’un script exécutable.
Vous pouvez utiliser l’option -f (fichier) de la manière suivante pour transmettre un nom de fichier à at:
at now + 5 minutes -f clean.txt
Vous pouvez obtenir le même résultat si vous redirigez le fichier vers:
at now + 5 minutesRemoving Scheduled Jobs from the Queue
To remove a scheduled job from the queue, you can use the atrm command. If you want to see the queue first to find the number of the job you want to remove, you can use atq . Then, use that job number with atrm, as shown below:
atqatrm 11atqComment afficher une vue détaillée des travaux
Comme nous l'avons mentionné précédemment, vous pouvez planifier des tâches loin dans le futur. Parfois, vous pourriez oublier ce qu'un travail va faire. La commande atq vous montre les travaux dans la file d'attente, mais pas ce qu'ils vont faire. Si vous voulez voir une vue détaillée d'un travail, vous pouvez utiliser l'option -c (cat).
Tout d'abord, nous utiliserons atq pour trouver le numéro de travail:
atqMaintenant, nous allons utiliser le job numéro 13 avec l'option -c:
at -c 13Voici une ventilation des informations que nous obtenons sur le poste:
Première ligne: Cela nous indique que les commandes seront exécutées sous le shell sh.
Deuxième ligne: nous voyons que les commandes seront exécutées avec un ID utilisateur et un ID de groupe de 1000. Ce sont les valeurs de la personne qui a exécuté la commande at.
Troisième ligne: la personne qui reçoit les e-mails envoyés.
Quatrième ligne: Le Masque utilisateur est 22. Il s'agit du masque utilisé pour définir les autorisations par défaut pour tous les fichiers créés dans cette session sh. Le masque est soustrait de 666, ce qui nous donne 644 (l'équivalent octal de rw-r - r--).
Données restantes: La majorité sont des variables d'environnement.Résultats d'un test. Un test vérifie que le répertoire d'exécution est accessible. Si ce n'est pas le cas, une erreur est générée et l'exécution du travail est abandonnée.
Les commandes à exécuter. Ils sont répertoriés et le contenu des scripts planifiés s'affiche. Notez que bien que le script de notre exemple ci-dessus ait été écrit pour s'exécuter sous Bash, il sera toujours exécuté dans un shell sh.La commande batch
La commande batch fonctionne de la même manière à la commande, mais avec trois différences significatives:
Vous ne pouvez utiliser la commande batch que de manière interactive.
Plutôt que de planifier l'exécution des travaux à un moment précis, vous les ajoutez à la file d'attente et la commande batch les exécute lorsque la charge moyenne du système est inférieure à 1,5.
En raison de ce qui précède, vous ne spécifiez jamais une date et une heure avec la commande batch.Lorsque vous utilisez la commande batch, vous l'appelez par son nom sans paramètres de ligne de commande comme ceci:
batchEnsuite, ajoutez des tâches comme vous le feriez avec la commande at.
Contrôle de l'accès à la commande at
Les fichiers at.allow et at.deny contrôlent qui peut utiliser la famille de commandes at. Ceux-ci se trouvent dans le répertoire / etc. Par défaut, seul le fichier at.deny existe et il est créé lors de l'installation de at.
Voici comment cela fonctionne:
at.deny: répertorie les applications et les entités qui ne peuvent pas utiliser at pour planifier des travaux.
at.allow: répertorie les utilisateurs pouvant utiliser at pour planifier des tâches. Si le fichier at.allow n'existe pas, at utilise uniquement le fichier at.deny.Par défaut, tout le monde peut utiliser à. Si vous souhaitez limiter les utilisateurs qui peuvent l'utiliser, utilisez le fichier at.allow pour répertorier ceux qui le peuvent. C'est plus facile que d'ajouter tous ceux qui ne peuvent pas utiliser at dans le fichier at.deny.
Voici à quoi ressemble le fichier at.deny:
sudo less /etc/at.denyLe fichier répertorie les composants du système d'exploitation qui ne peuvent pas être utilisés à. Beaucoup d'entre eux sont empêchés de le faire pour des raisons de sécurité, vous ne voulez donc pas en supprimer du fichier.
Maintenant, nous allons éditer le fichier at.allow. Nous allons ajouter Dave et Mary, mais personne d'autre ne sera autorisé à utiliser à.
Tout d'abord, nous tapons ce qui suit:
sudo gedit /etc/at.allowDans l'éditeur, nous ajoutons les deux noms, comme indiqué ci-dessous, puis enregistrons le fichier.
Si quelqu'un d'autre essaie d'utiliser at, on lui dira qu'il n'a pas la permission. Par exemple, disons qu'un utilisateur nommé eric tape ce qui suit:
atIl serait refusé, comme indiqué ci-dessous.
Encore une fois, Eric n'est pas dans le fichier at.deny. Dès que vous placez quelqu'un dans le fichier at.allow, tout le monde se voit refuser l'autorisation d'utiliser at.
Idéal pour les ponctuels
Comme vous pouvez le voir, at et batch sont idéaux pour les tâches que vous ne devez exécuter qu'une seule fois. Encore une fois, en bref:
Lorsque vous avez besoin de faire quelque chose qui n'est pas un processus régulier, planifiez-le avec à.
Si vous souhaitez exécuter une tâche uniquement lorsque la charge du système est suffisamment faible, utilisez batch.