开发者

Can this script wait for an external process to complete?

I have written this shell script as wrapper to a JAR file. The script launches the JAR without problem but completes without waiting for the JAR to finish its job.

#!/bin/bash

export WORK=/opt/conversion
export LOG=$WORK
export XMAIL=me@email.com
export JAVA_BASE=/usr/java/jdk1.6.0_06
export JAVA_HOME=/usr/java/jdk1.6.0_06/bin
export JAR=$WORK/conversion.jar
export CLASSPATH=$JAVA_BASE/lib/tools.jar
export CLASSPATH=$CLASSPATH:$WORK/lib/ojdbc14.jar
export CLASSPATH=$CLASSPATH:$JAR

$JAVA_HOME/java -Xms256M -Xmx512M -classpath 开发者_如何学Python$CLASSPATH com.myapp.cam.conversion >>$WORK/job.out 2>&1 &

echo $! > $WORK/job.pid
mail -s "Conversion" $XMAIL < $WORK/user_message
exit 0

Is there a way to have the script wait on my JAR file to complete?

Thanks for your input.


As others have said, remove the & and bash will wait till the command finishes. If you insist on running your process in the background, here is what you could do:

pid=`pidof java`

if [ "$pid" ]; then
    while kill -0 "$pid"; do
        sleep 1
    done
fi

The kill command is normally used to send signals to a particular process, but by using 0 as a signal you are only checking whether a process with such a pid exists without sending a signal.


You have a & at the end of the command:

$JAVA_HOME/java -Xms256M -Xmx512M -classpath $CLASSPATH com.myapp.cam.conversion >>$WORK/job.out 2>&1 &

which makes it run in background.

Remove the & to wait for the java process to complete before you proceed in the script.


If you want to run it in the background, add a wait command at the end of the script.


Don't run the conversion Java application in the background. Or, run ps repeatedly until you don't see the pid. This will allow you to do stuff while waiting.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜