0

我希望这相当简单,但我正在努力让它发挥作用。

我有一个 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 调用它?

谢谢,森林SDMC

4

2 回答 2

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
于 2012-07-20T18:00:08.413 回答
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。

于 2012-07-20T17:57:12.143 回答