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

みんなありがとうございます!

関連情報