O script Bash (com um comando java) não sai (script 2)

1

Eu inicio um script bash (de forma síncrona de java como usuário glassfish) que aciona outro script bash:

Script 1 executado em java:

#!/bin/bash

#Start script2 as myUser on myUser desktop
echo myPassword | su -c "export DISPLAY=:0.0;xhost +localhost;script2.sh;" myUser &
echo "After subscript"
#---------------
#... other tasks
#---------------
echo "Before exit"
exit 0

Script 2 executado a partir do script 1

#!/bin/bash

# Start java app with date added by awk at the beginning of every line
java -cp .:./lib/* com.mypackage.MyClass 2>&1 | awk '{print strftime("%D %T",systime())" "$0 }' >> logFile.log &

# Start java app without date added by awk on logs
#java -cp .:./lib/* com.mypackage.MyClass 2>&1 >> logFile.log &

Meu problema é que o script 1 nunca sai, a menos que eu mate o processo java iniciado no script 2. Este problema NÃO ocorre se eu remover a parte awk no script 2 (se eu usar a linha de comando comentada de java).

Estou executando: - GNU bash, versão 4.2.53 (1) -release (x86_64-redhat-linux-gnu) no Centos 6.4               - java 1.6.45 X86_64 e Glassfish 3.1.2.2

    
por Quentin Morrier 06.08.2015 / 09:46

1 resposta

0

Finalmente, encontrei a solução.

Tanto quanto eu entendi, foi a maneira de colocar em segundo plano os dois processos no meu script 2. Parece que o & aplica-se apenas ao awk (isso explicaria porque funciona sem a parte awk).

Com chaves, posso colocar em segundo plano ambas as partes (java e awk):

Script 2 executado a partir do script 1:

#!/bin/bash

# Start java app with date added by awk at the beginning of every line
{ java -cp .:./lib/* com.mypackage.MyClass 2>&1 | awk '{print strftime("%D %T",systime())" "$0 }'; } &>> logFile.log &

Obrigado a todos!

    
por 07.08.2015 / 16:54