Bash 스크립트(java 명령 사용)가 종료되지 않습니다(스크립트 2)

Bash 스크립트(java 명령 사용)가 종료되지 않습니다(스크립트 2)

다른 bash 스크립트를 트리거하는 bash 스크립트(glassfish 사용자로 java에서 동기식으로)를 시작합니다.

Java에서 실행되는 스크립트 1:

#!/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

스크립트 1에서 스크립트 2를 실행합니다.

#!/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 &

내 문제는 스크립트 2에서 시작된 Java 프로세스를 종료하지 않는 한 스크립트 1이 절대 종료되지 않는다는 것입니다. 이 문제확실히스크립트 2에서 awk 부분을 제거하면 이런 일이 발생합니다(주석이 달린 java 명령줄을 사용하는 경우).

실행 중: - Centos 6.4의 GNU bash, 버전 4.2.53(1)-릴리스(x86_64-redhat-linux-gnu) - java 1.6.45 X86_64 및 Glassfish 3.1.2.2

답변1

마침내 해결책을 찾았습니다.

내가 아는 한 이것은 내 스크립트 2에서 두 프로세스를 백그라운드에 배치하는 방법입니다. 것 같다&다음에만 적용됩니다.(awk 부분 없이 작동하는 이유를 설명합니다).

중괄호를 사용하면 두 부분(java 및 awk)을 모두 뒤에 배치할 수 있습니다.

script1에서 script2를 실행합니다.

#!/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 &

모두 감사합니다!

관련 정보