【问题标题】:Accessing the java executable from a cloudfoundry task command (cf run-task)从 cloudfoundry 任务命令访问 java 可执行文件(cf run-task)
【发布时间】:2016-12-24 12:03:00
【问题描述】:

我需要 java 可执行文件从 cloudfoundry 任务 命令运行 java -jar。

这是我尝试运行任务的方式:

cf run-task bignibou-batch "java -jar bignibou-batch/build/libs/bignibou-batch.jar"

这是我收到的错误消息:

2016-12-24T12:53:30.002+01:00 [APP/TASK/358e02df/0] [ERR] bash: java: command not found

我的清单使用 java buildpack 如下(见底部的bignibou-batch app):

---
buildpack: https://github.com/cloudfoundry/java-buildpack.git
memory: 1024M
env:
  APPLICATION_URL: http://bignibou-server.cfapps.io/
  APPLICATION_MAIL_NO_REPLY_ADDRESS: balteo@bignibou-server.cfapps.io
  SPRING_PROFILES_ACTIVE: cloud

applications:
  - name: bignibou-server
    path: bignibou-server/build/libs/bignibou-server.jar
    env:
      APPLICATION_GOOGLE_API_KEY: *******************
  - name: bignibou-batch
    path: bignibou-batch/build/libs/bignibou-batch.jar
    no-hostname: true
    no-route: true
    env:
      JAVA_OPTS: -Dspring.batch.job.names=messagesDigestMailingJob

编辑:当我尝试如下设置java buildpack的位置时:

cf run-task bignibou-batch "$PWD/.java-buildpack/open_jdk_jre/bin/java -jar bignibou-batch/build/libs/bignibou-batch.jar"

在发送命令之前,$PWD 变量已在我的本地计算机上解析...

【问题讨论】:

    标签: buildpack cloud-foundry


    【解决方案1】:

    一般来说,我们会考虑已安装 JRE 的位置,以及运行应用程序所需的命令,这些内部细节可能会在没有兼容性限制的情况下发生变化。据我所知(运行 Java Buildpack 团队近四年),也没有任何合同义务要求将液滴安装在 /home/vcap,这就是为什么我们在命令中非常小心地使用 $PWD 的原因。

    其他基于 Java 的任务的早期用户已经允许完全执行暂存(这将确保内存计算和 JAVA_OPTS 等内容正确放置在命令中),然后无需修改即可使用该命令行。

    您看到$PWD 被提早解决的问题是逃避比其他任何事情都重要。您可能应该做的第一个更改是从双引号 (") 切换到单引号 ('),这应该确保不会立即解决 $。有可能在管道中的其他地方再次提前解决了环境,这可能需要 \$ 转义,但我会推迟到你确定你已经看到它为止。

    【讨论】:

    • 嗨。我在这里打开了一个与 cf java buildpack 相关的问题:stackoverflow.com/questions/43009633 你能看一下吗?
    • 在旁注中,确保您使用的是正确的 buildkit 路径。有些答案列出了/open_jdk_jre/,但如果您的组织为此付费,它也可以是/oracle_jre/。如果你不确定,你可以运行这个命令,你应该能够看到你的 buildpack 主页:cf set-env <APP-NAME> JBP_LOG_LEVEL DEBUG
    【解决方案2】:

    要执行 spring 任务,我发现这很有用:

    cf run-task vc-billing-task '$PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/. org.springframework.boot.loader.JarLauncher' --name "vc-billing-task"
    

    只需确保您的 java/build-pack 已根据您的具体情况更新

    【讨论】:

      【解决方案3】:

      java 可执行文件可以在这里找到(假设使用了 java buildback):

      cf run-task bignibou-batch '$PWD/.java-buildpack/open_jdk_jre/bin/java -jar bignibou-batch/build/libs/bignibou-batch.jar'
      

      但是,我不确定这是为任务应用程序运行 java 命令的最佳方式...

      附注如果您认为它比这个更好,请随时添加您自己的答案。

      编辑:我已编辑路径并将硬编码的应用目录替换为$PWD 变量。

      【讨论】:

      • 就像 Ben Hale 说的,目前还不清楚/home/vcap 是否会在未来得到保障。
      • @GlynNormington 我已经更新了我的回复以考虑到 Ben Hale 的
      • 请注意,即使.java-buildpack/open_jdk_jre 也被视为实现细节。在我们发言时,我们正在讨论将该目录移至更安全的位置。
      猜你喜欢
      • 2018-04-18
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多