web-dev-qa-db-fra.com

Exécuter plusieurs commandes nohup en arrière-plan

Vous avez deux commandes CMD1 et CMD2. Des deux, CMD2 prend plus de temps à finir. Besoin d'exécuter cmd2 puis cmd1.

Essayé de les exécuter de la manière suivante:

bash$ (Nohup ./cmd2>result2 &) && Nohup ./cmd1>result1 &

ou

bash$ (Nohup ./cmd2>result2 &) ; Nohup ./cmd1>result1 &

Mais les deux fois, je peux voir CMD1 n'attend pas que la cmd2 ait fini et que les résultats sont remplis.

Comment faire fonctionner CMD1 après CMD2 lorsque les deux devraient être un processus de NohUp et s'exécuter en arrière-plan?

12
user33767

Vous avez fait les deux cmd1 et cmd2 courir en parallèle. Vous avez dit: "Démarrez CMD2 en arrière-plan et coupez-vous une association avec elle. Démarrez CMD1 en arrière-plan et coupez-vous une association avec elle. " Vous vouliez dire: "Démarrer cmd2 en arrière-plan; Quand il est complet, commencez CMD1 (également en arrière-plan). " Comme il n'existe plus d'association avec la tâche de fond, vous devez concevoir une tâche d'arrière-plan qui effectue CMD2 puis cmd1. C'est cmd2; cmd1 (ou plutôt cmd2 && cmd1 Pour exécuter CMD1 uniquement si CMD2 réussit) et vous devrez dire Nohup pour démarrer une coquille en cours d'exécution à l'arrière-plan.

Nohup sh -c './cmd2 >result2 && ./cmd1 >result1' &

Si cela ne vous dérange pas d'utiliser NOHUP:

{ command1 >result1 2>&1 && command2 >result2 2>&1 ; } & disown
3
artyom

Utilisez simplement:

Nohup ./cmd2>result2 & Nohup ./cmd1>result1 & Nohup ./cmd3>result3 &
2
Rahul Patil

faites-nous savoir ce que vous faites exactement avec CMD2 et CMD1. Cela dépend du type de tâche et de sortie souhaité de votre commande. Si vous êtes confronté à un problème avec frapper deux fois la touche Entrée avec la commande, il peut être compris par mon message

vous pouvez aller de cette façon aussi

Nohup `cmd2 && ccmd1` > Output.out 2> Error.err < /dev/null & 

Consultez la capture d'écran ci-dessous, ici, j'utilise 3 commandes et toutes exécutions une par une en série. J'ai utilisé des backticks pour cette tâche. Dans la capture d'écran, vous pouvez également observer l'horodatage de la date. La commande de sommeil a 60 secondes, d'où la commande suivante est donc exécutée avec succès. J'ai utilisé la commande de tâches pour vérifier que n'importe quelle commande s'exécute toujours à l'arrière-plan. Ici non. d'emplois que vous pouvez voir est 1.

Nohup-multiple-command

Cette capture d'écran est disponible dans ce lien également, s'il n'est pas visible

0
Sharad Chhetri