Bash 脚本(带有 java 命令)不退出(脚本 2)

Bash 脚本(带有 java 命令)不退出(脚本 2)

我启动一个 bash 脚本(以 glassfish 用户身份从 java 同步启动),该脚本触发另一个 bash 脚本:

从 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 &

我的问题是脚本 1 永远不会退出,除非我杀死脚本 2 中启动的 java 进程。这个问题才不是如果我删除脚本 2 中的 awk 部分(如果我使用带注释的 java 命令行),则会发生这种情况。

我正在运行: - GNU bash,版本 4.2.53(1)-release (x86_64-redhat-linux-gnu) 在 Centos 6.4 - java 1.6.45 X86_64 和 Glassfish 3.1.2.2

答案1

最后我找到了解决方案。

据我所知,这是在我的脚本 2 中将两个进程放入后台的方法。看起来&仅适用于awk(这可以解释为什么它在没有 awk 部分的情况下也能工作)。

使用大括号,我可以将两个部分(java 和 awk)放在后台:

从脚本 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 &

感谢大家!

相关内容