52 votes

Comment exécuter des commandes dans une file d'attente

J'ai besoin de copier plusieurs fichiers dans plusieurs dossiers. Je peux ajouter toutes mes commandes de copie à un script bash script et l'exécuter, mais je dois alors attendre qu'il se termine si je veux ajouter d'autres commandes à cette "file d'attente" de copie.

Existe-t-il un moyen d'exécuter des commandes en tant que file d'attente et d'ajouter d'autres commandes à cette file d'attente en cours d'exécution ?

Expliqué différemment, je veux lancer une tâche de longue haleine. Pendant qu'elle s'exécute, je veux en lancer une autre qui ne démarre pas tant que la première n'est pas terminée. Puis ajouter une autre tâche après la dernière et ainsi de suite. Est-ce possible d'une manière ou d'une autre ?

2voto

naftuli Points 21

Commande1 && Commande2

  • le "&&" signifie que la commande 2 ne s'exécute que lorsque la commande 1 se termine avec un code de retour de 0
  • Note : a || signifie que la commande 2 ne s'exécute que lorsque la commande 1 se termine avec un code de retour différent de 0.

1voto

Vous pouvez simplement ajouter des commandes à la ligne de commande de Shell qui exécute déjà une commande.

Soit vous tapez soigneusement, soit vous tapez ailleurs, vous vérifiez et vous faites un copier-coller. Même si la commande en cours génère des lignes de sortie, vous pouvez toujours taper quelque chose de nouveau, appuyer sur Entrée, et la commande sera exécutée lorsque toutes les commandes en cours ou entrées avant elle seront terminées.

L'exemple suivant est donné. Vous pouvez copier-coller l'ensemble, ou entrer les commandes suivantes pendant que la première s'exécute (si vous tapez vraiment très vite), ou plus probablement pendant que la deuxième s'exécute.. :

echo "foo"
sleep 10; echo "bar"
sleep 3
echo "baz"

0voto

Pete Points 206

La méthode la plus simple à laquelle je peux penser est de maintenir l'"état" de la file d'attente avec de simples fichiers de verrouillage dans /tmp. lorsque file1.sh exécute ses commandes cp, il conserve un fichier de verrouillage (ou hardlink) dans /tmp. lorsqu'il a terminé, il efface le fichier. tous les autres script devront chercher dans /tmp des fichiers de verrouillage avec le schéma de dénomination que vous avez choisi. naturellement, cette méthode est sujette à toutes sortes d'échecs, mais elle est triviale à mettre en place et peut être réalisée entièrement dans bash.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X