我已将此shell脚本编写为JAR文件的包装器。该脚本可以毫无问题地启动JAR,但无需等待JAR完成其工作即可完成。
#!/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 $CLASSPATH com.myapp.cam.conversion >>$WORK/job.out 2>&1 &
echo $! > $WORK/job.pid
mail -s "Conversion" $XMAIL < $WORK/user_message
exit 0
有没有办法让脚本等待我的JAR文件完成?
感谢您的意见。
答案 0 :(得分:6)
正如其他人所说,删除&
并且bash会等到命令完成。如果您坚持在后台运行您的流程,您可以执行以下操作:
pid=`pidof java`
if [ "$pid" ]; then
while kill -0 "$pid"; do
sleep 1
done
fi
kill
命令通常用于向特定进程发送信号,但通过使用0
作为信号,您只需检查具有此类pid的进程是否存在而不发送信号。< / p>
答案 1 :(得分:2)
命令末尾有&
:
$JAVA_HOME/java -Xms256M -Xmx512M -classpath $CLASSPATH com.myapp.cam.conversion >>$WORK/job.out 2>&1 &
使它在后台运行。
删除&
以等待java
进程完成,然后再继续编写脚本。
答案 2 :(得分:1)
如果要在后台运行它,请在脚本末尾添加wait
命令。
答案 3 :(得分:0)
不要在后台运行转换Java应用程序。或者,反复运行ps
,直到看不到pid为止。这样你就可以在等待的时候做点什么。