nohup vários comandos sequenciais

7

Eu preciso de nohup dois comandos, um após o outro. O segundo comando deve ser executado APÓS o primeiro comando. Aqui estão os comandos:

tar -zcf archive.tar.gz.tmp mydir
mv archive.tar.gz.tmp archive.tar.gz

Preciso que os comandos sejam executados em segundo plano, mas obviamente não os dois ao mesmo tempo. O segundo comando deve ser executado depois que o primeiro comando for concluído. Eu tentei isso:

nohup tar -zcf archive.tar.gz.tmp mydir ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &

mas os comandos não são executados em segundo plano. O prompt bash aguarda até que os dois comandos estejam completos antes de me dar outro prompt. Eu preciso que eles corram em segundo plano.

Se eu fizer:

nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 &

Isso funciona perfeitamente no fundo. É só quando tento fazer mais de um comando.

Eu também tentei:

nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 & ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &

Mas isso também não funcionou. Sintaxe inválida ou algo assim. Tenho certeza de que há uma maneira de fazer isso, mas não tenho certeza da sintaxe.

A única alternativa que posso pensar é colocar os comandos em um arquivo .sh e nohup esse arquivo, mas isso não é necessariamente algo que eu possa fazer no sistema linux que eu tenho que implementar (limitações de privilégios, etc. ).

    
por Jake Wilson 24.08.2012 / 18:53

4 respostas

4

Solução mais fácil: crie um script de shell com

 #/bin/sh
 tar -zcf archive.tar.gz.tmp mydir
 mv archive.tar.gz.tmp archive.tar.gz

E use nohup myscript . Possivelmente com alguma documentação extra no script.

(Sim, sou um otário para a documentação. Especialmente quando trabalho com várias pessoas ou quando você pode um dia deixar o trabalho e seu sucessor precisa descobrir o porquê ".)

Uma alternativa pode ser iniciar um novo shell para uma subtarefa (nesse caso, seu tar e mover)

nohup '$ (tar -zcf arquivo.tar.gz.tmp mydir; mv arquivo.tar.gz.tmp arquivo.tar.gz)

Alternativa 2:

nohup '' 'tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz '' '.

Eu realmente prefiro o roteiro embora. Os comentários podem ser bastante úteis quando você ou alguém olha para o script em alguns anos e se pergunta por que isso foi feito dessa maneira.

Em uma nota não relacionada: Como diabos eu postei um anser com um backtick nele? (O comando para um shell 'usar este comando; alimentar a saída para outro comando como entrada').

    
por 24.08.2012 / 19:08
2

Eu acho que você precisa de parênteses.

nohup $(tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz) >/dev/null 2>&1 &

    
por 24.08.2012 / 19:01
1

Talvez um filme de bash?

nohup bash -c 'tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1' &
    
por 24.08.2012 / 19:16
0

Você pode usar screen para fornecer os comandos e desconectar-se da sessão de tela:

screen
tar -zcf archive.tar.gz.tmp mydir && mv archive.tar.gz.tmp archive.tar.gz
ctrl-a d to detach

Os comandos serão executados como no nohup.

    
por 24.08.2012 / 19:39

Tags