Comment utiliser at et batch dans Linux pour programmer des commandes

Contenu

Une fenêtre de terminal sur un système Linux.

Si vous souhaitez planifier un travail Linux qui n'aura lieu qu'une seule fois, cron c'est exagéré. Les 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 libres, vous pouvez utiliser batch.

Comment planifier des tâches Linux

Les cron démon garde une liste des tâches que vous exécutez à des moments précis. Ces tâches et programmes s'exécutent en arrière-plan à l'heure planifiée. Cela vous donne une grande flexibilité dans la planification des tâches qui doivent être répétées.. Si vous devez exécuter une tâche une fois par heure, à une heure précise chaque jour, ou au moins une fois par mois ou par an, vous pouvez le régler sur cron.

Malgré cela, cela n'aide pas si vous souhaitez planifier une tâche pour qu'elle ne s'exécute qu'une seule fois. Bien sûr, vous pouvez le mettre dans cron, mais alors vous devez 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 est gênant.

Avec Linux, si vous êtes aux prises avec un obstacle, c'est presque une garantie que quelqu'un d'autre s'est également battu avec lui. Par chance, parce que les systèmes d'exploitation de type Unix existent depuis si longtemps, De plus, il y a de grandes chances que quelqu'un ait créé une solution à votre problème.

Pour le problème décrit précédemment, ils l'ont fait et ça s'appelle at.

EN RELATION: Comment planifier des tâches sous Linux: Introduction aux fichiers Crontab

Installation de la commande at

Nous avons dû installer at sous Ubuntu 18.04 et Manjaro 18.1.0 (il était déjà installé dans Fedora 31).

Installer at sous Ubuntu, utilise cette commande:

sudo apt-get install à

Une fois l'installation terminée, vous pouvez commencer le at démon avec cette commande:

sudo systemctl enable --now atd.service

à Manjaro, vous installez at avec cette commande:

sudo pacman -Sy à

Une fois l'installation terminée, tapez cette commande pour démarrer le at diable:

sudo systemctl enable --now atd.service

Dans toute distribution, vous pouvez taper cette commande pour vous assurer atd le démon est en cours d'exécution:

ps -e | grep atd

Comment utiliser la commande at de manière interactive

Utilisation at, vous devez attribuer une date et une heure pour exécuter. Il y a beaucoup de flexibilité dans la façon dont vous pouvez les écrire, que nous couvrirons plus tard dans ce post.

Malgré cela, même quand on va 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 saisissez quelque chose qui n'est pas une date et une heure, at répond avec “Temps illisible”, comme il est montré dans ce qui suit:

à
à la banane

Les dates et heures peuvent être explicites ou relatives. Par exemple, disons que vous voulez qu'une commande s'exécute dans la minute. at sait ce que cela signifie “maintenant”, donc tu peux utiliser now et donne-lui une minute, Donc:

à présent + 1 minute

at imprimer un message et un at et attendez que vous tapiez les commandes que vous souhaitez programmer. Premier, malgré cela, considérer le message, comme il est montré dans ce qui suit:

Il te dit at lancer une instance du sh coquille et volonté exécuter les commandes à l'intérieur de celui-ci. Vos commandes ne s'exécuteront pas dans le shell bash, qui est compatible avec le sh shell mais a un ensemble plus riche de fonctions.

Si vos commandes ou scripts essaient d'utiliser une fonction ou une installation fournie par Bash, mais sh il ne le fait pas, échouera.

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 maintenant vous pouvez exécuter vos commandes et vérifier qu'elles fonctionnent correctement.

Pour revenir au shell bash, écrire le exit commander:

sortir

Vous ne verrez aucun message d'erreur ou sortie standard des commandes. Ceci est dû au fait sh shell démarre en tâche de fond et s'exécute sans interface écran.

Toute sortie des commandes, bien ou mal, il vous est envoyé par email. Il est envoyé par le système de courrier interne à celui qui exécute le at commander. Cela signifie que vous devez installer et configurer ce système de messagerie interne.

Beaucoup de (la majorité) des systèmes Linux n'ont pas de système de messagerie interne, car on en a rarement besoin. Ceux qui utilisent généralement un système comme envoyer du courrier O suffixe. Si votre système n'a pas de système de messagerie interne, vous pouvez faire écrire des scripts dans des fichiers ou rediriger la sortie vers des fichiers pour ajouter des enregistrements.

Si la commande ne génère pas de message d'erreur ou de sortie standard, vous ne recevrez de toute façon pas d'e-mail. De nombreuses commandes Linux indiquent le succès par le silence, donc dans la plupart des cas, vous ne recevrez pas d'email.

EN RELATION: Qu'est-ce que stdin, stdout et stderr sous Linux?

Il est maintenant temps de taper une commande dans at. Pour cet exemple, nous allons utiliser un petit fichier de script appelé sweep.sh qui efface le *.bak, *.tmp, Oui *.o enregistrements. Entrez le chemin de la commande, comme il est montré dans ce qui suit, puis appuyez sur Entrée.

Une autre invite de commande apparaît et vous pouvez ajouter autant de commandes que vous le souhaitez. Comme d'habitude, il est plus pratique d'avoir vos commandes dans un seul script et d'appeler simplement ce script de l'intérieur at.

Présion Ctrl + D pour dire at vous avez fini d'ajouter des commandes. at spectacles , ce qui veut dire fin de transmission. On vous dit le numéro de la tâche et quand elle est planifiée pour s'exécuter, comme il est montré dans ce qui suit:

Après l'exécution du travail, écrivez ce qui suit pour vérifier votre courrier interne:

courrier

S'il n'y a pas de courrier, doit prendre le dessus sur le succès. De toute façon, dans cette circonstance, vous pouvez vérifier et voir si le *.bak , *.tmp, Oui *.o Les fichiers ont été supprimés pour confirmer que la commande a fonctionné.

Tapez ce qui suit pour tout recommencer:

à présent + 1 minute

Après une minute, écrivez ce qui suit pour revérifier votre courrier:

courrier

Oye, nous avons du courrier! Pour lire le message numéro un, presse 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, les a éliminés.

Appuyez sur D + Entrez pour supprimer l'e-mail et Q + Entrez 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 vers 11:00 un m:
  • Courir demain à 11:00 un m:
  • Courir vers 11:00 une. M. A partir de ce jour la semaine prochaine:
  • Courir à cette heure, en ce jour, la semaine prochaine:
  • Courir vers 11:00 suis vendredi prochain:
  • Courir à cette heure vendredi prochain:
  • Courir vers 11:00 suis à cette date, le mois prochain:
  • Courir vers 11:00 suis à une date précise:
  • Courir à l'intérieur 30 minutes:
  • Exécuter dans les deux heures:
  • Courir cette fois demain:
  • Courir à cette heure le jeudi:
  • Courir vers 12:00 un m:
  • Courir vers 12:00 après-midi:
  • Si vous êtes britannique, vous pouvez même programmer une commande à exécuter à l'heure du thé (4 p. M.):

Regarder la file d'attente des travaux

Vous pouvez écrire le atq commande pour afficher la file d'attente des travaux planifiés, comme il est montré dans ce qui suit.

Pour chaque commande dans la file d'attente, atq afficher les informations suivantes:

  • Identification de l'emploi
  • Rendez-vous programmé
  • Heure prévue
  • File d'attente où se trouve le travail. Les files d’attente sont étiquetées comme “une”, “b”, etc. Tâches normales avec lesquelles vous planifiez at entrer dans la file d’attente “une”, tandis que les tâches que vous planifiez avec batch (qui sont discutés plus tard dans ce post) entrer dans la file d’attente “b”.
  • La personne qui a planifié le travail.

Utilisation de at sur la ligne de commande

Vous ne devriez pas utiliser at de manière interactive; vous pouvez également l'utiliser dans la commande. Cela facilite l'utilisation des scripts internes.

Vous pouvez diriger des commandes vers at, comme ça:

écho "sh ~/balayage.sh" | à 08:45 UN M

Le travail est accepté et planifié par at, et le numéro de travail et la date d'exécution sont signalés comme avant.

EN RELATION: Comment utiliser Pipes sur Linux

Utiliser at avec des scripts

Vous pouvez également stocker un script dans un fichier, puis le transmettre à at. Il peut s'agir d'un fichier de script en texte brut, il n'est pas nécessaire que ce soit un script exécutable.

Vous pouvez utiliser le -f (déposer) comme suit pour passer un nom de fichier à at:

à présent + 5 minutes -f clean.txt

Vous pouvez obtenir le même résultat si vous redirigez le fichier vers at:

à présent + 5 minutes < nettoyer.txt

Suppression des tâches planifiées de la file d'attente

Pour supprimer une tâche planifiée 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 . Plus tard, utiliser ce numéro de travail avec atrm, Comme indiqué ci-dessous:

et
atrm 11
et

Comment afficher une vue détaillée des travaux

Comme nous l'avons mentionné précédemment, peut planifier des travaux à l'avenir. Parfois, vous pouvez oublier ce qu'un travail va faire. Les atq La commande affiche 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 le -c (chat) option.

Premier, nous utiliserons atq pour trouver le numéro de travail:

et

À présent, nous utiliserons le numéro de travail 13 avec lui -c option:

à -c 13

Voici une ventilation des informations que nous obtenons sur le travail:

  • Première ligne: Cela nous indique que les commandes seront exécutées sous le sh coquille.
  • Deuxième ligne: Nous voyons que les commandes seront exécutées avec un identifiant d'utilisateur et de groupe de 1000. Ce sont les valeurs pour la personne qui a dirigé le at commander.
  • Troisième ligne: La personne qui reçoit les e-mails. atenvoyer.
  • Quatrième ligne: Les Masque utilisateur il est 22. Il s'agit du masque utilisé pour déterminer les autorisations par défaut pour tout fichier créé dans ce sh session. Le masque est soustrait de 666, ce qui nous donne 644 (l'octal identique de rw-r--r--).
  • Données restantes: La plupart sont des variables d'environnement.

  • Résultats d'un test. Un test vérifie que le répertoire d'exécution peut être saisi. S'il ne peut pas, une erreur est générée et l'exécution du travail est abandonnée.
  • Les commandes à exécuter. Ceux-ci sont répertoriés et le contenu des scripts programmés est affiché. Notez que même si le script de notre exemple ci-dessus a été écrit pour s'exécuter dans Bash, fonctionnera toujours sur un sh coquille.

La commande batch

Les batch commander fonctionne de la même manière Al at commander, mais avec trois différences significatives:

  1. Vous ne pouvez utiliser que le batch commande interactivement.
  2. Au lieu de planifier des tâches à exécuter à une heure spécifique, les ajoute à la file d'attente et le batch La commande les exécute lorsque la charge moyenne du système est inférieure à 1,5.
  3. À cause de ce qu'il s'est passé auparavant, ne spécifiez jamais une date et une heure avec le batch commander.

Lorsque vous utilisez le batch commander, l'appelle par son nom sans paramètres de ligne de commande comme celui-ci:

grouper

Ensuite, ajoutez des tâches comme vous le feriez avec le at commander.

Contrôler l'accès à la commande at

Les at.allow Oui at.deny les fichiers contrôlent qui peut utiliser le at famille de commandes. Ceux-ci se trouvent dans le /etc annuaire. Par défaut, seulement le at.deny le fichier existe et est créé lorsque at c'est installé.

C'est ainsi que fonctionnent ces:

  • at.deny: Lister les applications et entités qui ne peuvent pas être utilisées at planifier des travaux.
  • at.allow: Listes qu'ils peuvent utiliser at planifier des travaux. Si il at.allow Le fichier n'existe pas, at il suffit d'utiliser le at.deny Record.

Par défaut, tout le monde peut utiliser at. Si vous voulez restreindre qui peut l'utiliser, utiliser el at.allow fichier pour lister ceux qui peuvent. C'est plus facile que d'ajouter tous ceux qui ne peuvent pas utiliser at Al at.deny Record.

Ceci est ce que at.deny le fichier ressemble:

sudo moins /etc/at.deny

Le fichier répertorie les composants du système d'exploitation qu'ils ne peuvent pas utiliser at. Beaucoup d'entre eux ne peuvent pas le faire pour des raisons de sécurité, donc vous ne voulez supprimer aucun fichier.

À présent, nous allons éditer le at.allow Record. Ajoutons dave Oui mary, mais personne d'autre ne pourra utiliser at.

Premier, nous écrivons ce qui suit:

sudo gedit /etc/at.allow

Dans l'éditeur, on ajoute les deux noms, comme il est montré dans ce qui suit, puis nous sauvegardons le fichier.

Si quelqu'un d'autre essaie d'utiliser at, ils vous diront que vous n'avez pas la permission. Par exemple, disons un utilisateur nommé eric écris ce qui suit:

à

Serait rejeté, comme il est montré dans ce qui suit.

De nouveau, eric n'est pas dans le at.deny Record. Dès que vous mettez quelqu'un dans le at.allow déposer, tous les autres se voient refuser l'autorisation d'utiliser at.

Idéal pour les occasions exceptionnelles

Comme tu peux le voir, les deux at Oui batch ils sont idéaux pour les tâches que vous ne devez exécuter qu'une seule fois. De nouveau, comme une revue rapide:

  • Lorsque vous devez faire autre chose qu'une procédure régulière, programme avec at.
  • Si vous souhaitez exécuter une tâche uniquement lorsque la charge système est suffisamment faible, utilisation batch.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.