【问题标题】:Differences between Worker Applications and Tasks in Pivotal Cloud Foundry and invoking a linux applicationPivotal Cloud Foundry 和调用 linux 应用程序中的 Worker 应用程序和 Tasks 之间的区别
【发布时间】:2019-07-11 21:06:15
【问题描述】:

我有一个第三方 linux 应用程序,它必须在主 Spring Boot 应用程序运行之前运行并完成。我已阅读有关工作应用程序和一次性任务的信息,但目前我不知道我的用例属于哪一类。 linux 应用程序在某种程度上依赖于主应用程序,所以我认为一次性任务(带有运行任务)是我需要的。

同时,linux应用程序必须在主应用程序启动之前完成。如果我的假设是正确的,我会很高兴知道如何在启动主应用程序之前确定 linux 应用程序已经完成。 另一方面,我想知道如何在 Cloud Foundry 上推送 linux 应用程序,以防我需要将其视为工作应用程序。

【问题讨论】:

    标签: linux cloud-foundry


    【解决方案1】:

    工作者是一种基于相同代码库运行多个操作系统进程的方法。例如,如果您有一个 Web 应用程序,并且除了 Web 部件之外,它还有一个后台进程,它可能处理长时间运行的作业或类似的东西。 Web 和工作进程都将被设计为同时运行并永远运行(即永不退出,如果退出就是崩溃)。

    基于相同代码分支的任务并非旨在与您的主应用程序并行运行。它将运行一段时间并退出。经典示例是批处理和单次运行作业,例如,如果您有一组需要处理的记录,当这些记录完成时,任务就会退出(这是预期的,不是崩溃)。任务通常与调度程序结合使用并反复运行。

    两者都不适合您尝试做的事情。您可以使用一个任务,但您需要手动管理该任务并在您的应用程序启动之前让它运行。您可以使用 shell 脚本和 cf cli 执行此操作,例如:使用 --no-start 推送您的应用程序,运行您的任务,等待它完成,然后 cf start 您的应用程序。

    您可以做的其他几件事:

    • Package a .profile script with your app。这将在与您的应用程序相同的容器中执行,但在您的应用程序运行之前。除非脚本成功完成,否则应用程序不会启动。这几乎就是你所说的你想要的,但它有一个严重的限制,因为你只有很少的时间来完成你的.profile 脚本(默认为 60 秒,大多数平台上最多 180 秒,基本上是cf push -t)。如果它没有足够快地完成,您的应用程序将被视为尚未启动,并将重新启动。这也将在您的应用程序每次启动时以及在每个应用程序实例中运行,这可能不是您想要的。最后一点,文档说你不能在 Java 应用程序中使用它,但他们错了,它只是更复杂)。

    • 修改您的启动命令(即cf push -c)。这与.profile 基本相同,只是您将多个命令放入启动命令中,例如cf push -c 'do_something_1 && do_something_2 && do_something_3 ...')。此选项与.profile 选项有类似的限制,而且它不适用于具有相当长且复杂的启动命令的Java buildpack(Java 应用程序不要使用此选项)。

      李>

    希望有帮助!

    【讨论】:

    • 真的很好区分,谢谢。我从来不知道 Worker 应用程序也是一个 LRP 并且运行在另一个应用程序的领域中。在这种情况下,工人不适用于我的用例。我实际上遵循了“一次性任务”的方向,但我遇到了另一个要求。
    • 我目前对一次性任务的理解是,它是在推送主应用后调用的,所以它也和一个主应用有关,因为我必须引用主应用的名称在运行任务之前。如何访问本地文件系统以告诉命令在哪里可以找到我的二进制文件和其他相关文件?我可以将任务视为独立应用程序,即像普通应用程序一样推送吗?
    • My current understanding of a one-off task is that, it is called after pushing the main application -> 这是不正确的。当您推送应用程序时,它只会上传代码并启动应用程序,除非您添加 --no-start 标志。它不运行任何任务。如果您需要/想要运行任务,则需要手动运行该任务。
    • it is also related to a primary app, since I have to quote the name of the main app before running the task -> 正确,两者是相关的。它们共享相同的代码库。运行时,应用程序将拥有自己的容器,任务将拥有自己的容器。除了相同的代码库和安装的依赖项(如 Java)之外,没有重叠。
    • How can I access the local file system to tell the command where to find my binary and other associated files? -> 就像在应用程序中一样。您有一个临时的本地文件系统,其中包含您的应用程序源代码和依赖项(如 Java)。这与您的应用程序公开的内容完全相同,只是一个独特的副本,因为任务和应用程序位于不同的容器中。本地文件系统的生命周期与任务的生命周期相同。
    猜你喜欢
    • 2016-08-17
    • 2015-09-03
    • 2017-06-27
    • 2023-03-10
    • 2016-06-04
    • 2017-09-26
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    相关资源
    最近更新 更多