我可以在manifest.yml文件中运行多个命令吗?

时间:2020-10-22 18:39:14

标签: python cloudfoundry

我对manifest.yml文件和命令参数有疑问。我正在尝试运行多个python脚本,而我想知道是否有更好的方法可以实现这一目标?

命令:python3 CD_Subject_Area.py python3 CD_SA_URLS.py

请让我知道如何一次调用多个脚本。谢谢!

1 个答案:

答案 0 :(得分:0)

要运行几个短期(即运行并最终退出)命令,您需要使用Cloud Foundry任务。使用任务而不是将自定义命令添加到manifest.yml或Procfile中的原因是因为这些任务只能运行一次。

如果您在上面添加了命令,则它们可能会运行多次。这是因为Cloud Foundry上的应用程序将运行并应永远执行。如果退出,则平台会认为它已崩溃,并将重新启动它。因此,当您的任务结束时,即使成功完成(即退出0),platfrom仍然认为这是崩溃,因此将一次又一次地运行它。直到停止您的应用。

对于一个任务,您将改为执行以下操作:

  1. cf push您的应用程序。这将启动并暂存该应用程序。您可以简单地将command / -c参数保留为空,并且不包含Procfile [1] [2]。推送将执行,buildpack将运行并启动您的应用程序,然后由于没有命令,它将无法启动。没关系。

  2. 运行cf stop,将您的应用置于停止状态。这将告诉平台停止尝试重新启动它。

  3. 运行cf run-task <app-name> <command>。例如,cf run-task my-cool-app "python3 CD_Subject_Area.py"。这将在自己的容器中执行任务。该任务将运行完成。查看cf tasks <app-name>将显示结果。使用cf logs <app-name> --recent将显示输出。

然后您可以重复此操作以运行任意数量的其他任务命令。您无需等待原始版本开始运行。它们都将在单独的容器中执行,因此一个任务与另一个任务完全分开。


[1]-一种替代方法是将命令设置为sleep 99999或类似的东西,不映射路线,并将运行状况检查类型设置为process。然后,该应用程序应成功启动。您仍然可以停止它,但这只是避免了一个不太正常的错误。

[2]-如果您已经设置了命令并希望撤消该命令,请从manifest.yml中将其删除,然后运行cf push -c null,或者简单地cf delete您的应用程序和{ {1}}再来一次。否则,该命令将保留在Cloud Controller中,而不是您想要的。

相关问题