다른 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 &
모두 감사합니다!