在java.ext.dirs中使用環境變量致使crontab執行不成功的問題及解決
Table of Contents
1 java.ext.dirs的使用和環境變量
在一個小項目中,出於簡化須要,沒有劃分不一樣的模塊,而是視爲一個模塊,打成一個jar包,經過java -cp 類名的方式進行不一樣的調用。
由於引用的jar包比較多,因此使用了java.ext.dirs進行簡化處理。爲了保證java自身的ext jar包引用,須要在java.ext.dirs中增長相應路徑。
命令行以下:
java
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模式中運行正常。
sql
2 問題:在crontab中執行失敗
上述命令原樣複製到crontab中,會發現執行失敗。通過分析,發現是在調用java自身的ext中jar包內容時失敗。
初步判斷是環境變量$JAVAHOME在crontab執行的環境中不存在形成的。
shell
3 解決辦法
在crontab中,先導出環境變量,而後再執行腳本便可。
bash
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/