Ejecutar múltiples comandos nohup en segundo plano


12

Tengo dos comandos cmd1 y cmd2. De los dos, cmd2 tarda más en terminar. Necesita ejecutar cmd2 y luego cmd1.

Intenté ejecutarlos de la siguiente manera:

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

o

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

Pero en ambas ocasiones puedo ver que cmd1 no está esperando que cmd2 termine y se llene el resultado1.

¿Cómo hacer que cmd1 se ejecute después de cmd2 cuando ambos deberían ser nohup y ejecutarse en segundo plano?



2
La pregunta en unix.stackexchange.com/questions/67006/… es ligeramente diferente ya que quería mantener mi orden de ejecución. Corríjame si me equivoco al comprender la otra pregunta.
user33767

Respuestas:


12

Hiciste ambas cosas cmd1y cmd2corriste en paralelo. Usted dijo: “Comience cmd2 en segundo plano y corte cualquier asociación con él. Inicie cmd1 en segundo plano y corte cualquier asociación con él ". Querías decir: "Iniciar cmd2 en segundo plano; cuando esté completo, comience cmd1 (también en segundo plano) ". Como ya no hay ninguna asociación con la tarea en segundo plano, debe idear una tarea en segundo plano que realice cmd2 y luego cmd1. Esto es cmd2; cmd1(o mejor dicho, cmd2 && cmd1ejecutar cmd1 solo si cmd2 tiene éxito), y deberá indicar nohupque se inicie un shell en segundo plano para eso.

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

Gracias. Esta funcionando bien Sí, eso es lo que estaba pensando, después de hacer que el primer cmd pase al fondo, no afecta el segundo comando, que comienza a pesar de que quería que esperara a que terminara el primer comando. Necesito leer el manual sobre el envío de comandos a segundo plano.
user33767

3

Si no te importa no usar nohup:

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

Lo comprobaré. Pero actualmente irá con la respuesta de Giles, donde el comando está envuelto con sh. Gracias de todos modos
user33767

Esta es una mala idea. Cuando el usuario cierra la sesión de la consola, matará la sesión.
mootmoot

@mootmoot esto funciona según lo previsto, verifíquelo usted mismo; los comandos no recibirán SIGHUP cuando el shell principal salga.
artyom

Sí, es seguro para shell si ejecuta el comando usando crond / crontab. Pero no es seguro para pty / xterm / ssh. unix.stackexchange.com/questions/3886/…
mootmoot

2

Simplemente use:

nohup ./cmd2>result2 & nohup ./cmd1>result1 & nohup ./cmd3>result3 &

Si bien ejecutar el comando múltiple está bien, quería mantener el orden exacto de ejecución, es decir, cmd2 primero y luego cmd1 y no sucede con el comando anterior. gracias
user33767

0

díganos qué está haciendo exactamente con cmd2 y cmd1. Depende del tipo de tarea y salida que desee de su comando. Si se enfrenta a un problema al presionar dos veces la tecla Intro con el comando, mi publicación puede resolverlo

puedes ir por este camino también

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

Vea la siguiente captura de pantalla, Aquí estoy usando 3 comandos y todos se ejecutan uno por uno en serie. Utilicé backticks para esta tarea. En la captura de pantalla también puede observar la marca de fecha y hora. el comando sleep tiene 60 segundos, por lo tanto, después de 60 segundos, mi siguiente comando se ejecuta con éxito. Utilicé el comando jobs para verificar si algún comando aún se ejecuta en segundo plano. Aquí no. de los trabajos que puede ver es 1.

nohup-multiple-command

Esta captura de pantalla también está disponible en este enlace , si no está visible

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.