如何在CloudFoundry中添加cron作业

时间:2017-05-30 14:26:30

标签: python cloudfoundry

我在CloudFoundry中有几个Python应用程序。现在我想安排他们的执行。例如,必须在每个月的第二天执行特定应用程序。 我在互联网上找不到任何东西。这甚至可能吗?

2 个答案:

答案 0 :(得分:1)

Cloud Foundry会将您的应用程序部署在容器中。您可以使用库来按照特定的时间表执行代码,但无论如何,您需要付费才能让该实例在整个时间内运行。

你要做的事情是" serverless computing"的完美候选人。 (也称为"事件驱动"或"作为服务"计算。

这些部署技术在响应触发时执行功能,例如REST api调用,特定时间戳,新数据库插入等......

您可以使用Openwhisk无服务器计算平台执行您的python云代工厂应用程序。

IBM在其云平台Bluemix上提供此托管版本。

我不知道你的代码是什么样的,所以我将使用这个示例hello world函数:

import sys

def main(dict):
    if 'message' in dict:
        name = dict['message']
    else:
        name = 'stranger'
    greeting = 'Hello ' + name + '!'
    print(greeting)
    return {'greeting':greeting}

您可以使用online editorCLI将您的操作(功能)上传到OpenWhisk。

上传完您的操作后,您可以使用闹钟套件按特定时间表自动执行这些操作。要在在线编辑器中执行此操作,请单击"自动执行此过程"并选择报警包。 要通过CLI执行此操作,我们需要先创建一个触发器:

$ wsk trigger create regular_hello_world --feed /whisk.system/alarms/alarm -p cron '0 0 9 * * *'
ok: created trigger feed regular_hello_world

这将在每天早上9点触发。然后,我们需要通过创建规则将此触发器链接到我们的操作:

$ wsk rule create regular_hello_rule regular_hello_world hello_world
ok: created rule regular_hello_rule

有关详细信息,请参阅docs on creating python actions.

答案 1 :(得分:1)

CloudFoundry平台本身没有调度程序(至少目前没有),运行应用程序的容器没有安装cron(不太可能发生)。

如果您想安排定期运行的代码,您可以选择几个选项。

  • 您可以部署包含计划程序的应用程序。调度程序可以直接在该容器中运行您的代码,也可以触发代码在其他地方运行(例如:它将HTTP请求发送到另一个应用程序,该请求会触发代码运行)。如果您触发代码在其他地方运行,您可以使调度程序应用程序非常精简(可能使用64米或更少内存)以降低成本。

  • 您可以查找第三方计划程序服务。这种服务的可用性和成本将根据您的CF提供商而有所不同,但有一些服务可用于处理调度。这些功能通常类似于前面的示例,其中HTTP请求在特定时间发送到您的应用程序并触发您的计划代码。许多服务提供商提供免费等级,每月免费为您提供少量触发器。

  • 如果你的服务器在CF之外安装了cron,你可以在那里使用cron来安排任务并触发代码在CF上运行。您可以通过向应用程序发送HTTP请求来执行此操作,但是,此选项还使您可以使用CloudFoundry的任务功能。

CloudFoundry有一个任务的概念,它是一些代码的一次性执行。有了它,您可以执行cf run-task命令来触发任务运行。例如:cf run-task <app-name> "python my-task.py"。更多关于文档的内容,here。使用任务的好处在于,您的提供商只会在任务运行时向您收费。

要查看您的提供商是否有可用的任务,请运行cf feature-flags并查看task_creation是否设置为enabled

希望有所帮助!