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 após a conclusão do primeiro comando. 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 do bash espera até que os dois comandos sejam concluídos antes de me fornecer outro prompt. Eu preciso que eles sejam executados em segundo plano.
Se eu fizer:
nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 &
Isso funciona perfeitamente em segundo plano. É 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 existe uma maneira de fazer isso, mas não tenho certeza da sintaxe.
A única alternativa que consigo pensar é colocar os comandos em um .sh
arquivo e nohup desse arquivo, mas isso não é necessariamente algo que eu possa fazer no sistema Linux em que tenho que implementar isso (limitações de privilégios, etc.).
Responder1
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, adoro documentação. Especialmente quando trabalho com várias pessoas ou quando algum dia você pode deixar o emprego e seu sucessor precisa descobrir o porquê.)
Uma alternativa pode ser iniciar um novo shell para uma subtarefa (neste caso, seu tar e move)
nohup `$(tar -zcf arquivo.tar.gz.tmp meudir; mv arquivo.tar.gz.tmp arquivo.tar.gz)
Alternativa 2:
nohup ```tar -zcf archive.tar.gz.tmp meudir ; mv arquivo.tar.gz.tmp arquivo.tar.gz```.
Eu realmente prefiro o roteiro. Os comentários nele contidos podem ser bastante úteis quando você ou outra pessoa olhar o roteiro daqui a alguns anos e se perguntar por que foi feito dessa maneira.
Em uma nota não relacionada: como diabos faço para postar uma resposta com um crase? (O comando para um shell 'usar este comando; alimentar a saída para outro comando como entrada').
Responder2
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 &
Responder3
Talvez um envoltório de festa?
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' &
Responder4
Você pode usar screen
para dar os comandos e se desconectar da sessão da 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 nohup.