我无法从 运行我的 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 计划中存在一些问题:
该
%
字符在 crontab 中具有特殊含义,必须对其进行转义,就好像\%
您想像在命令行上通常使用它一样使用它。看如何在 crontab 作业中执行“date”?source
解释计划中命令的 shell 可能不支持该命令。这取决于/bin/sh
您系统上的 shell(dash
不支持非标准source
命令)。确保使用.
(点)代替source
以使命令可移植。参见例如无法使用 cron 中的“source”?第三个问题可能是是否找到可执行文件,这取决于cron 环境中变量
java
的值。PATH
如果要确保java
找到该文件,请设置PATH
为在 crontab 中包含正确的目录、您获取的环境文件,或使用其绝对路径调用可执行文件。