Si vous souhaitez planifier un travail Linux qui ne se produira qu’une seule fois, cron est exagéré. La at la famille de commandes est ce dont vous avez besoin! Et si vous souhaitez exécuter des processus uniquement lorsque votre système dispose de ressources gratuites, vous pouvez utiliser batch.
Comment planifier des travaux Linux
La cron le démon 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 ont, et cela s’appelle at.
Bientôt: Comment planifier des tâches sous Linux: une introduction aux fichiers Crontab
Installation de la commande at
Nous avons dû installer at sur Ubuntu 18.04 et Manjaro 18.1.0 (il était déjà installé sur Fedora 31).
À installer at sur Ubuntu, utilisez cette commande:
sudo apt-get install at
Une fois l’installation terminée, vous pouvez démarrer le at démon avec cette commande:
sudo systemctl enable --now atd.service
Sur Manjaro, vous installez at avec cette commande:
sudo pacman -Sy at
Une fois l’installation terminée, tapez cette commande pour démarrer le at démon:
sudo systemctl enable --now atd.service
Sur n’importe quelle distribution, vous pouvez taper cette commande pour vous assurer que le atd le démon est en cours d’exécution:
ps -e | grep atd
Comment utiliser la commande at de manière interactive
Utiliser at, 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 at 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 « Temps brouillé », comme indiqué ci-dessous:
at
at banana
Les dates et heures peuvent être explicites ou relatives. Par exemple, disons que vous voulez qu’une commande s’exécute dans une minute. at sait ce que signifie «maintenant», vous pouvez donc utiliser now et ajoutez-y une minute, comme ceci:
at now + 1 minute
at imprime un message et un at invite et attend que vous saisissiez les commandes que vous souhaitez planifier. Tout d’abord, considérez le message, comme indiqué ci-dessous:
Il vous dit at lance une instance de sh coquille et volonté exécuter les commandes à l’intérieur. Vos commandes ne seront pas exécutées dans le shell Bash, qui est compatible avec le sh shell mais a un ensemble de fonctionnalités plus riche.
Si vos commandes ou scripts essaient d’utiliser une fonction ou une fonctionnalité fournie par Bash, mais sh non, ils échoueront.
Il est facile de tester si vos commandes ou scripts s’exécuteront dans sh. Utilisez le sh commande pour démarrer un sh coquille:
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 le exit commander:
exit
Vous ne verrez aucune sortie standard ou messages d’erreur des commandes. C’est parce que le sh shell 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 le at commander. 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.
Bientôt: Que sont stdin, stdout et stderr sous Linux?
Maintenant, il est temps de taper une commande dans at. Pour cet exemple, nous utiliserons un petit fichier de script appelé sweep.sh qui supprime le *.bak, *.tmp, et *.o des dossiers. 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 at.
Appuyez sur Ctrl + D pour dire at vous avez terminé d’ajouter des commandes. at affiche
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 le *.bak , *.tmp, et *.o les fichiers 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
Au bout d’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 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 le atq pour afficher la file d’attente des travaux planifiés, comme indiqué ci-dessous.
Pour chaque commande de la file d’attente, atq affiche les informations suivantes:
- ID de poste
- Date prévue
- Heure prévue
- Mettre en file d’attente le travail. Les files d’attente sont étiquetées «a», «b», etc. Tâches normales avec lesquelles vous planifiez
ataller dans la file d’attente «a», tandis que les tâches que vous planifiez avecbatch(traité plus loin dans cet article) aller dans la file d’attente «b». - La personne qui a planifié le travail.
Utilisation de at sur la ligne de commande
Vous n’êtes pas obligé d’utiliser at interactivement; vous pouvez également l’utiliser sur la commande. Cela facilite l’utilisation de scripts internes.
Vous pouvez diriger des commandes vers at, comme ça:
echo "sh ~/sweep.sh" | at 08:45 AM
Le travail est accepté et planifié par at, et le numéro de travail et la date d’exécution sont indiqués comme auparavant.
Bientôt: Comment utiliser les tuyaux sous Linux
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 le -f (fichier) de la manière suivante pour passer 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:
at now + 5 minutes < clean.txt
Suppression des travaux planifiés de la file d’attente
Pour supprimer un travail planifié de la file d’attente, vous pouvez utiliser le atrm commander. Si vous voulez d’abord voir la file d’attente pour trouver le numéro du travail que vous souhaitez supprimer, vous pouvez utiliser atq . Ensuite, utilisez ce numéro de travail avec atrm, comme indiqué ci-dessous:
atq
atrm 11
atq
Comment 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 atq La commande vous montre les travaux dans la file d’attente, mais pas ce qu’ils vont faire. Si vous souhaitez voir une vue détaillée d’un travail, vous pouvez utiliser le -c (chat) option.
Tout d’abord, nous utiliserons atq pour trouver le numéro de poste:
atq
Maintenant, nous allons utiliser le travail numéro 13 avec le -c option:
at -c 13
Voici 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
shcoquille. - Deuxième ligne: Nous voyons que les commandes s’exécuteront avec un ID d’utilisateur et de groupe de 1 000. Ce sont les valeurs de la personne qui a exécuté le
atcommander. - Troisième ligne: La personne qui reçoit les e-mails
atenvoie. - Quatrième ligne: La Masque utilisateur est 22. C’est le masque utilisé pour définir les autorisations par défaut pour tous les fichiers créés dans ce
shsession. Le masque est soustrait de 666, ce qui nous donne 644 (l’équivalent octal derw-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
shcoquille.
La commande batch
La batch commander fonctionne de la même manière à la at commande, mais avec trois différences significatives:
- Vous ne pouvez utiliser que
batchcommande 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
batchLa commande 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 le
batchcommander.
Lorsque vous utilisez le batch commande, vous l’appelez par son nom sans paramètres de ligne de commande comme ceci:
batch
Ensuite, ajoutez des tâches comme vous le feriez avec le at commander.
Contrôle de l’accès à la commande at
La at.allow et at.deny les fichiers contrôlent qui peut utiliser at famille de commandes. Ceux-ci sont situés dans le /etc annuaire. Par défaut, seul le at.deny le fichier existe et il est créé lorsque at est installé.
Voici comment cela fonctionne:
at.deny: Répertorie les applications et entités qui ne peuvent pas utiliseratpour planifier des travaux.at.allow: Listes qui peuvent utiliseratpour planifier des travaux. Si laat.allowle fichier n’existe pas,atutilise uniquement leat.denyfichier.
Par défaut, tout le monde peut utiliser at. Si vous souhaitez limiter les utilisateurs qui peuvent l’utiliser, utilisez le at.allow fichier pour lister ceux qui le peuvent. C’est plus facile que d’ajouter tous ceux qui ne peuvent pas utiliser at à la at.deny fichier.
Voici ce que le at.deny le fichier ressemble à:
sudo less /etc/at.deny
Le fichier répertorie les composants du système d’exploitation qui ne peuvent pas utiliser at. 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 at.allow fichier. Nous allons ajouter dave et mary, mais personne d’autre ne sera autorisé à utiliser at.
Tout d’abord, nous tapons ce qui suit:
sudo gedit /etc/at.allow
Dans 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 un utilisateur nommé eric tape ce qui suit:
at
Il serait refusé, comme indiqué ci-dessous.
Encore, eric n’est pas dans le at.deny fichier. Dès que vous mettez quelqu’un dans le at.allow fichier, tout le monde se voit refuser l’autorisation d’utiliser at.
Idéal pour les ponctuels
Comme vous pouvez le voir, les deux at et batch sont idéales pour les tâches que vous ne devez exécuter qu’une seule fois. Encore une fois, en bref:
- Lorsque vous devez faire quelque chose qui n’est pas un processus régulier, planifiez-le avec
at. - Si vous souhaitez exécuter une tâche uniquement lorsque la charge système est suffisamment faible, utilisez
batch.
Soutenez notre effort ❤️
Si vous avez apprécié cet article, pensez à laisser un pourboire pour nous aider à continuer à publier du contenu de qualité.



















































