我希望这很简单,但我很难让它发挥作用。
我有一个java包,我想用shell脚本命令执行...
/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 :(得分: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。
答案 1 :(得分:0)
刚刚找到答案并且工作正常,希望其他人会觉得这很有用......
您可以在shell脚本中动态生成classpath变量,然后将其作为属性应用于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