2012-07-20 45 views
0

我希望這很簡單,但我正在努力實現這個目標。無法在沒有命令行的情況下執行shell腳本手動類路徑首先更新

我有我想用一個shell腳本命令來執行Java包...

/jdk1.7.0/bin/java .path.to.classname.ClassToExecute >> /var/log/output.log 

...所以基本上...

./SCRIPT_NAME 

...應該運行以上從命令行。

的問題是沒有在命令行中,以使會話,查看特定的JAR需要每次都第一類路徑更新...

export CLASSPATH=$CLASSPATH:/path/to/jar/file/lib/JAR_NAME.jar:. 

如果我不把此行的第一shell腳本不會執行與我需要手動添加的JAR有關的NoClassDefFoundError拋出錯誤。

任何人都可以告訴我在哪裏需要編輯這個類路徑更新,以便它始終可用於腳本和也作爲最終我想從cron調用它的cron?

感謝, ForestSDMC

回答

0

你的shell腳本應該是這樣的。

#!/bin/bash 
export CLASSPATH=$CLASSPATH:/path/to/jar/file/lib/JAR_NAME.jar:. 
/jdk1.7.0/bin/java .path.to.classname.ClassToExecute >> /var/log/output.log 

您還需要更改腳本的權限,以便它是可執行

chmod 700 SCRIPT_NAME 

700 =所有者只能執行腳本 770 =所有者和一個組的成員可以運行該腳本 777 =每個有權訪問服務器的人都可以運行該腳本。

注意到你想從cron運行這個。您需要從crontab條目或從腳本中獲取.profile。

0

就找到了答案,並能正常工作,所以希望其他人會發現這個有用...

可以動態地生成類路徑中的shell腳本中的變量,然後應用它作爲java命令行執行的屬性。像這樣...

THE_CLASSPATH= 
for i in `ls /path/to/the/JARS/lib/*.jar` 
do 
    THE_CLASSPATH=${THE_CLASSPATH}:${i} 
done 

/usr/bin/java -cp ".:${THE_CLASSPATH}" path.to.the.class.ClassName >> /var/log/logfile.log