crontab 中的 CLASSPATH

crontab 中的 CLASSPATH

我无法从 运行我的 Java 程序cron。我可以使用一个简单的示例来重现该问题,如下所述:

在文件中,/path/to/javaenv.txt我定义CLASSPATH变量如下:

export CLASSPATH=\
"/path/to/dir1":\
"/path/to/dir2":\
"/path/to/dirn":\
"/path/to/jar1":\
"/path/to/jar2":\
"/path/to/jarn"

从命令行,我可以通过执行以下操作非常轻松地执行 Java 程序:

source "/path/to/javaenv.txt" && java pkgName.ClassName cmd-line-params > /tmp/test-$(date +%s).txt 2>&1

cron但是,即使我的crontab条目有以下条目,该作业也不会从 执行:

* * * * * source "/path/to/javaenv.txt" && java pkgName.ClassName cmd-line-params > /tmp/test-$(date +%s).txt 2>&1

答案1

您的 cron 计划中存在一些问题:

  1. %字符在 crontab 中具有特殊含义,必须对其进行转义,就好像\%您想像在命令行上通常使用它一样使用它。看如何在 crontab 作业中执行“date”?

  2. source解释计划中命令的 shell 可能不支持该命令。这取决于/bin/sh您系统上的 shell(dash不支持非标准source命令)。确保使用.(点)代替source以使命令可移植。参见例如无法使用 cron 中的“source”?

  3. 第三个问题可能是是否找到可执行文件,这取决于cron 环境中变量java的值。PATH如果要确保java找到该文件,请设置PATH为在 crontab 中包含正确的目录、您获取的环境文件,或使用其绝对路径调用可执行文件。

相关内容