【问题标题】:Running jar with cron throws error: '/bin/sh: 1: java: not found'使用 cron 运行 jar 会引发错误:'/bin/sh: 1: java: not found'
【发布时间】:2015-11-28 00:45:21
【问题描述】:

我已使用以下命令将我的作业安排为每天 12:30 运行:

30 12 * * * java -jar test.jar

它抛出错误:

/bin/sh: 1: java: not found

我尝试从 shell 运行此命令:java -jar test.jar,它运行良好。

现在我不明白。我会说它正在发生,因为JAVA_HOME 环境变量没有设置,但是为什么它可以在shell 中工作呢?

【问题讨论】:

  • 您的 cron 作业与您在 shell 中工作的用户不同,对吧?
  • 我怎样才能知道?我以 root 身份使用 shell,我猜 cron 可能以 tomcat 或 bitnami 运行,但我不确定。

标签: java linux cron


【解决方案1】:

错误告诉您,shell 找不到要执行的 java 二进制文件。这与JAVA_HOME 环境变量无关,但与PATH 变量有关,sh 会查询该变量以查找任何命令。

当您从cron 运行您的任务时,shell 没有收到与该命令适用于您的交互式 shell 相同的初始化。你同样会发现JAVA_HOME 也没有设置在那里。

【讨论】:

  • 听起来是真的,那么分辨率是多少?将 java/bin 添加到路径变量中?
  • 您应该大致了解如何正确使用cron。例如检查here。
【解决方案2】:

您的登录 shell 环境与您的 cronjob 的环境不同。使用env打印您的环境。

检查两者的路径 - 在 cron 内(类似) 30 08 * * * env > ~/cronenv。 在您的登录外壳中,只需使用env。然后比较PATH变量。 正如@Marko Topolnik 已经说过,您在 cron 中的 PATH 显然不包含您的 java 可执行文件。

【讨论】:

    【解决方案3】:

    您可以在 crontab 文件中添加一行,其中包含您需要的路径:

    # m h  dom mon dow   command
    PATH=.....
    

    你可能需要这样的东西:

    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

    您还可以使用echo $PATH 找出您在常规环境中拥有的内容,然后简单地使用该值。

    【讨论】:

      【解决方案4】:

      我尝试的另一个选项是使用安装的 java 的路径。

      1. 确保使用以下命令安装了 java

      java-版本

      1. 检查java安装路径

      哪里是java

      1. 提供运行应用的完整路径

      30 12 * * * /path_from_prev_step/java -jar test.jar

      如果服务器安装了旧版本,这也将允许您使用不同的 java 便携版本运行此 jar。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-14
        • 1970-01-01
        • 2018-06-06
        • 2019-09-11
        • 1970-01-01
        • 2015-12-18
        • 2020-07-28
        • 2020-01-28
        相关资源
        最近更新 更多