我启动了一个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 &
我的问题是,除非我杀死脚本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
终于我找到了解决方案。
据我了解,这是在脚本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 &
谢谢大家!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句