Para combinar o que a outra resposta e os comentários disseram, adicione um pouco:
-
exec your_command &
não faz sentido. A linha de comando será executada em um subshell assíncrono, e oexec
será essencialmente ignorado.- Isso é uma simplificação ligeira .
Se dissermos
(command1; command2) &
entãocommand1
ecommand2
será executado (command2
apóscommand1
conclui) em um subshell assíncrono. Mas se nós diga(exec command1; command2) &
entãocommand1
será executado mascommand2
não.
- Isso é uma simplificação ligeira .
Se dissermos
- Qualquer coisa depois de uma forma correta
O comando
exec
(que não consiste apenas em redirecionamentos) em um script será ignorado. Mesmo se oexec
falhar, o shell sairá sem executar as linhas subseqüentes (pode-se usar a opçãocommand exec ...
oubash
execfail
para impedir queexec
saia do shell após a falha). - se o
exec
for executado em um subshell, como emexec cmd &
ouexec cmd | cmd2
ou(exec cmd3)
, apenas essa sub-ssh sairá. - Se o seu comando de validação precisar conhecer o PID do processo do servidor, você pode estar sem sorte.
-
Caso contrário, se o seu comando de validação espera automaticamente um tempo para o servidor iniciar, você pode fazer
export FOO=foo # step 1 /usr/bin/java my-validation & # step 1½ exec /usr/bin/java my-server # step 2
-
Caso contrário, você pode fazer
export FOO=foo # step 1 (sleep 10; /usr/bin/java my-validation) & # step 1½ exec /usr/bin/java my-server # step 2
Aviso: se o processo do "meu servidor" terminar rapidamente, então é bem possível que o seu script saia, e o processo pai recuperará o controle e retomará a execução, antes que o seu comando “my-validation” seja executado. Se o processo pai e o comando “my-validation” ambos escrevem a saída para o mesmo local, eles podem ser misturados.
Mas se o processo pai não estiver esperando o script sair, isso pode não ser um problema.