別の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 &
みんなありがとうございます!