【问题标题】:Running java code from CRON job从 CRON 作业运行 java 代码
【发布时间】:2016-03-19 15:12:07
【问题描述】:

从 CRON 作业运行 Java 代码时遇到问题。

我正在尝试像这样从 CRON 运行“.sh”文件:

* * * * * root sh /run-test.sh >> /var/log/cron.log
# empty line

这个 run-test.sh 有:

java HelloWorld

当,我导航到根文件夹,即“/”并运行命令:

sh run-test.sh

它将正确运行我的 HelloWorld 类并为我提供所需的输出。

但是,通过 CRON 选项卡,它总是说:

Error: Could not find or load main class HelloWorld

我无法判断这可能是什么原因。立即回复将很有帮助。谢谢

【问题讨论】:

  • 请出示run-test.sh的内容。 Cron 会清理环境,因此您需要对其进行设置(例如 CLASSPATH)。另外,您是否以 root 身份运行 Java 进程?!
  • run-test.sh 仅包含:java HelloWorld,是的,我以 root 身份运行它。
  • 在从 IDE 构建 jar 之前,您是否创建了指定的主类??

标签: java cron sh


【解决方案1】:

您可能需要更改 cron 的当前工作目录。

* * * * * root cd / && sh /run-test.sh >> /var/log/cron.log

您的脚本中没有任何绝对路径,因此它将相对于工作目录运行。

【讨论】:

  • 是的,您的代码有意义 +1。因为,当我尝试使用以下代码从 CRON 作业运行我的 Java 类时: * * * * * root (cd /; java HelloWorld) >> /var/log/cron.log 它工作正常。谢谢:)
【解决方案2】:

你应该在你的 shell 文件中使用完整的类名。例如 com.nri.gov.master.ctrl.HelloWorld 像这样——

$JAVA com.nri.gov.master.ctrl.HelloWorld $Var 2>> /var/log/console.log

【讨论】:

  • 试过了,但它也会导致相同的响应。
【解决方案3】:

检查以下几点,

  • 设置 Java 主页:export JAVA_HOME=[path-to-java-directory]
  • Java 需要类的完整包名:java some.package.HelloWorld
  • Java 类应该在类路径中可用。例如,在 classpath 中设置一个 jar: export CLASSPATH=yourjar.jar
  • 设置/运行 cron 的工作示例:

* * * * * export JAVA_HOME=[path-to-java-directory]; /bin/sh your-executable-file.sh >> your-application-log-file.log

【讨论】:

    猜你喜欢
    • 2015-03-14
    • 2017-11-03
    • 2018-01-10
    • 1970-01-01
    • 2020-04-27
    • 2019-06-18
    • 2013-03-06
    • 2011-11-29
    • 2012-06-19
    相关资源
    最近更新 更多