我有一个可执行的jar,并且我已经编写了一个shell脚本来执行它。当我手动运行shell脚本时,它运行得很好,但是当使用crontab计划每周运行它时,它会给出以下错误-
log_process.sh: line 16: java: command not found
shell脚本中的第16行是-
java -jar $jar_path $logDirectory $logNamePattern $processedLogDirectory $oldResultsDirectory 2>>$log_file 1>&2
任何想法为什么它发生,它运行良好,当我手动运行,而不是当它得到vrontab作业运行?
您的cron作业没有权限访问与您作为用户相同的$PATH变量
解决这个问题最简单的方法是打开一个终端,然后运行下面的命令:which java
这将给你java可执行文件的绝对路径。例如:
/opt/Oracle/Java/bin/java
将'java'命令替换为整个路径。
您可能还希望在shell脚本中指定JAVA_HOME变量。从终端运行:
echo $JAVA_HOME
会给你另一个路径,比如'/opt/Oracle/Java'。在脚本中(假设使用的是bash),在运行java命令之前,输入:
export JAVA_HOME=/opt/Oracle/Java
将'/opt/Oracle/Java'替换为前面的回显给你的输出