我已将此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
Run Code Online (Sandbox Code Playgroud)
有没有办法让脚本等待我的JAR文件完成?
感谢您的输入.
正如其他人所说,删除&和bash将等待命令完成.如果您坚持在后台运行您的流程,您可以执行以下操作:
pid=`pidof java`
if [ "$pid" ]; then
while kill -0 "$pid"; do
sleep 1
done
fi
Run Code Online (Sandbox Code Playgroud)
该kill命令通常用于将信号发送到特定进程,但通过使用0信号,您只检查具有此类pid的进程是否存在而不发送信号.