在java.ext.dirs中使用环境变量导致crontab执行不成功的问题及解决

时间:2023-03-09 21:57:29
在java.ext.dirs中使用环境变量导致crontab执行不成功的问题及解决

在java.ext.dirs中使用环境变量导致crontab执行不成功的问题及解决

1 java.ext.dirs的使用和环境变量

在一个小项目中,出于简化需要,没有划分不同的模块,而是视为一个模块,打成一个jar包,通过java -cp 类名的方式进行不同的调用。
因为引用的jar包比较多,所以使用了java.ext.dirs进行简化处理。为了保证java自身的ext jar包引用,需要在java.ext.dirs中增加相应路径。
命令行如下:

java -Djava.ext.dirs=$JAVA_HOME/jre/lib/ext:/project/script/ -cp /project/script/ -Dlog4j.configuration=file:/project/script/log4j.properties com.galaxy.Comments 洛阳 /project/out/

这样,在 /project/script/中的所有jar文件都会自动加入到classpath中。
该命令在shell模式中运行正常。

2 问题:在crontab中执行失败

上述命令原样复制到crontab中,会发现执行失败。经过分析,发现是在调用java自身的ext中jar包内容时失败。
初步判断是环境变量$JAVAHOME在crontab执行的环境中不存在造成的。

3 解决办法

在crontab中,先导出环境变量,然后再执行脚本即可。

35 11 * * * . /etc/profile;java -Djava.ext.dirs=$JAVA_HOME/jre/lib/ext:/project/script/ -cp /project/script/ -Dlog4j.configuration=file:/project/script/log4j-comment.properties com.kulv.spider.ota.comment.Comments 洛阳 /project/out/

Author: galaxy

Created: 2016-08-11 Thu 13:24

Emacs 24.5.6 (Org mode 8.2.10)

Validate