从CRON作业运行Java代码

3

在从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进程?! - cadrian
run-test.sh 只包含:java HelloWorld,是的,我正在以 root 身份运行它。 - gomzee
你在从IDE构建jar之前是否创建了指定的主类? - Ataur Rahman Munna
3个回答

2

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

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

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


是的,你的代码很有意义 +1。当我尝试使用以下代码从CRON作业运行我的Java类时: * * * * * root (cd /; java HelloWorld) >> /var/log/cron.log它可以正常工作。谢谢 :) - gomzee

1

在您的shell文件中,应该使用类的完全限定名称。例如:com.nri.gov.master.ctrl.HelloWorld 像这样--

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


尝试过了,但它也导致了相同的响应。 - gomzee

1

请检查以下几点:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接