2017-05-30 93 views
1

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

回答

0

Cloud Foundry会将您的应用程序部署在容器中。您可以使用库在特定的时间表上执行您的代码,但是您支付的任何方式都可以让该实例一直运行。

什么你想要做的是“serverless computing”(也称为“事件驱动”或“功能作为服务”的计算。

这些部署技术的响应执行功能的完美人选触发例如REST API调用,一个时间戳,一个新的数据库插入等等

你可以使用Openwhisk无服务器计算平台执行Python Cloud Foundry的应用程序。

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} 

您可以使用上传您的行为(函数)OpenWhisk要么online editorCLI

一旦你已经上传你的动作,你可以通过使用报警包在特定的时间表上自动执行它们。要在在线编辑器中执行此操作,请单击“自动执行此过程”并选择警报程序包。 要通过我们首先需要创建一个触发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

的CloudFoundry平台本身不具备调度(至少不会在这个时候)和运行应用程序的容器没有安装cron(不太可能发生)。

如果您想安排代码定期运行,您有几个选项。

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

  • 您可以查找第三方调度程序服务。像这样的服务的可用性和成本将取决于您的CF提供商,但有服务产品来处理计划。这些功能通常与前一个示例的功能相同,即在特定时间将HTTP请求发送到您的应用程序,并触发您的计划代码。许多服务提供商提供免费套餐,每月免费提供少量触发器。

  • 如果你有一台服务器安装了cron的CF之外,你可以使用cron有安排的任务,并触发代码在运行CF.您可以通过向您的应用发送HTTP请求来像前面的示例一样执行此操作,但是,此选项还可以让您使用CloudFoundry的任务功能。

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

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

希望有帮助!

+0

感谢您的回答。你有第三方调度程序的例子吗?谢谢。 – user3080315

+0

我在PWS上使用过这项服务:https://docs.run.pivotal.io/marketplace/services/temporize.html –