【问题标题】:Can I have multiple commands run in a manifest.yml file?我可以在 manifest.yml 文件中运行多个命令吗?
【发布时间】:2020-10-22 18:39:14
【问题描述】:

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

命令:python3 CD_Subject_Area.py python3 CD_SA_URLS.py

请告诉我如何一次调用多个脚本。谢谢!

【问题讨论】:

  • 有几种方法可以让某些东西运行起来。这些脚本的意图是什么?它们会永远运行吗?还是它们是运行和退出的短期任务?它们应该同时运行还是按顺序运行?
  • Daniel,他们正在运行 Microsoft SQL Merge 语句。他们是短期的,然后他们退出。它们如何运行并不重要。

标签: python cloud-foundry


【解决方案1】:

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

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

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

  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 您的应用程序并再次cf push 它。否则,该命令将保留在 Cloud Controller 中,这不是您想要的。

【讨论】:

    猜你喜欢
    • 2021-08-18
    • 2015-04-21
    • 2019-04-16
    • 2012-02-11
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    相关资源
    最近更新 更多