crontab执行脚本始终不能成功运行java程序的问题终于解决。

当手动执行脚本与crontab执行脚本的结果不一致时,这类问题都应该是环境设置问题。解决办法大部分情况是通过脚本中添加source /etc/profile来解决。如果还没有解决就是其他问题了。

我的这个问题就是自己设置Java参数时没有添加路径所致。上代码:

文件updateStock.sh

#!/bin/sh
source /etc/profile
source ~/.bash_profile
export JAVA_HOME=/usr/local/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
echo "=========================================================="
echo "Starting......"
$JAVA_HOME/bin/java -jar StockAnalyzer.jar
echo "Complete!"
echo "=========================================================="

在shell中直接运行updateStock.sh,没有问题,能看到StockAnalyzer.jar打印的信息。可是在crontab任务时,虽然能成功打印Starting... "complete!" 但始终不能执行StockAnalyzer.jar。

原因是应该给StockAnalyzer.jar加上路径,否则不能找到它。虽然手动执行时,可以在当前路径中找到它,因为它与updateStock.sh放在同一目录下。可是crontab执行任务时,所在当前路径未必就是存放StockAnalyer.jar的路径。所以有问题。

解决方案:

#!/bin/sh
source /etc/profile
source ~/.bash_profile
export JAVA_HOME=/usr/local/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
echo "=========================================================="
echo "Starting......"
$JAVA_HOME/bin/java -jar /myPath/StockAnalyzer.jar
echo "Complete!"
echo "=========================================================="

问题解决。

发表评论