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

Can I have multiple commands run in a manifest.yml file?

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

命令:python3 CD_Subject_Area.py python3 CD_SA_URLS.py

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

到 运行 几个 short-term(即 运行 并最终退出)您希望使用 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 中删除,或者只是 [=21] =] 你的应用程序,然后 cf push 再次。否则,该命令将保留在 Cloud Controller 中,这不是您想要的。