由cronjob执行时,shell脚本失败,否则正常运行

5

我有一个可执行的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作业时,您要使用哪个命令? - dev2d
1
  1. 这是同一个用户吗?
  2. 如果是,环境是否相同?提示:尝试在cron和命令行中使用env
- fge
1
你的Java安装在哪里?尝试使用Java安装的完整路径。例如:/usr/local/bin/java -jar $har_path... - divaka
还要确保$jar_path是您的jar文件的完整路径。 - divaka
2
我认为这是你的情况:https://dev59.com/ZkvSa4cB1Zd3GeqPhtmC?rq=1 - divaka
1个回答

9
您的定时任务没有访问与用户相同的$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

用前面echo命令输出的结果替换“/opt/Oracle/Java”。

抱歉..我的错...它正在执行你告诉我的内容...还有一些其他问题我不确定...感谢你的帮助.. - Popeye
好的,即使这个问题已经得到回答,也请给我更多信息,看看我能否提供帮助 :D - chamakits

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