我对manifest.yml文件和命令参数有疑问。我正在尝试运行多个python脚本,而我想知道是否有更好的方法可以实现这一目标?
命令:python3 CD_Subject_Area.py python3 CD_SA_URLS.py
请让我知道如何一次调用多个脚本。谢谢!
答案 0 :(得分:0)
要运行几个短期(即运行并最终退出)命令,您需要使用Cloud Foundry任务。使用任务而不是将自定义命令添加到manifest.yml或Procfile中的原因是因为这些任务只能运行一次。
如果您在上面添加了命令,则它们可能会运行多次。这是因为Cloud Foundry上的应用程序将运行并应永远执行。如果退出,则平台会认为它已崩溃,并将重新启动它。因此,当您的任务结束时,即使成功完成(即退出0),platfrom仍然认为这是崩溃,因此将一次又一次地运行它。直到停止您的应用。
对于一个任务,您将改为执行以下操作:
cf push
您的应用程序。这将启动并暂存该应用程序。您可以简单地将command / -c
参数保留为空,并且不包含Procfile [1] [2]。推送将执行,buildpack将运行并启动您的应用程序,然后由于没有命令,它将无法启动。没关系。
运行cf stop
,将您的应用置于停止状态。这将告诉平台停止尝试重新启动它。
运行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中,而不是您想要的。