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?
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
Utilisez simplement:
Nohup ./cmd2>result2 & Nohup ./cmd1>result1 & Nohup ./cmd3>result3 &
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.
Cette capture d'écran est disponible dans ce lien également, s'il n'est pas visible