我启动一个bash脚本(作为glassfish用户同步地从java启动),它触发另一个bash脚本:
脚本1从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脚本2从脚本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 &我的问题是,除非我杀死脚本2中启动的java进程,否则脚本1永远不会退出。如果我删除脚本2中的awk部分(如果我使用注释的java命令行),则不会出现此问题。
我正在运行:- GNU,版本4.2.53(1)-release ( X86_64 -redhat-linux-gnu),在CentOS6.4- java 1.6.45 X86_64和Glassfish 3.1.2.2上运行。
发布于 2015-08-07 14:54:08
最后我找到了解决办法。
据我所知,这是将两个进程都放在脚本2中的方法。看起来& apply只适用于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 &谢谢大家!
https://unix.stackexchange.com/questions/220497
复制相似问题