Executando vários comandos nohup em segundo plano

11

Tenho dois comandos cmd1 e cmd2. Dos dois, o cmd2 demora mais para terminar. Precisa executar cmd2 e, em seguida, cmd1.

Tentou executá-los da seguinte maneira:

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

ou

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

Mas no momento em que vejo, o cmd1 não está esperando que o cmd2 termine e o result1 seja preenchido.

Como fazer com que cmd1 seja executado após cmd2 quando ambos devem ser processados nohup e executados em segundo plano?

    
por user33767 07.03.2013 / 19:34

4 respostas

11

Você fez os dois cmd1 e cmd2 serem executados em paralelo. Você disse: “Inicie o cmd2 em segundo plano e separe qualquer associação com ele. Inicie o cmd1 em segundo plano e separe qualquer associação com ele. ”Você quis dizer:“ Inicie o cmd2 em segundo plano; quando estiver concluído, inicie o cmd1 (também em segundo plano). ”Como não há mais nenhuma associação com a tarefa em segundo plano, é necessário planejar uma tarefa em segundo plano que execute cmd2 e cmd1. Isso é cmd2; cmd1 (ou melhor, cmd2 && cmd1 para executar o cmd1 somente se o cmd2 for bem-sucedido) e você precisará informar nohup para iniciar um shell em execução em segundo plano para isso.

nohup sh -c './cmd2 >result2 && ./cmd1 >result1' &
    
por 07.03.2013 / 19:52
2

Se você não se importa em não usar nohup:

{ command1 >result1 2>&1 && command2 >result2 2>&1 ; } & disown
    
por 07.03.2013 / 19:47
1

Use simplesmente:

nohup ./cmd2>result2 & nohup ./cmd1>result1 & nohup ./cmd3>result3 &
    
por 07.03.2013 / 20:05
0

deixe-nos saber exatamente o que você está fazendo com cmd2 e cmd1. Depende do tipo de tarefa e saída que você quer do seu comando. Se você está enfrentando problemas ao digitar duas vezes, digite a chave com o comando e, em seguida, ele pode ser descrito pelo meu post

você pode ir por esse caminho também

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

Veja a imagem abaixo, aqui estou usando 3 comandos e todos estão executando um por um em série. Eu usei backticks para esta tarefa. Na captura de tela, você também pode observar o registro de data e hora. O comando sleep tem 60 segundos, portanto, após 60 segundos, meu próximo comando é executado com sucesso. Eu usei o comando jobs para verificar se algum comando ainda está sendo executado no segundo plano. Aqui não. de trabalhos que você pode ver é 1.

Estacapturadetelaestádisponívelneste link também, se não estiver visível

    
por 15.07.2013 / 10:22