【发布时间】:2019-10-18 06:09:27
【问题描述】:
我有一个 Azure Batch 场景,其中我有一个任务链,它们依次运行。依赖关系设置正确,因此它们彼此运行良好。
但是,我需要在执行之前将所有文件从以前的任务文件夹复制到新任务的文件夹中。我事先不知道会有多少文件和什么文件,所以我只想复制所有内容。我找不到使用 Batch 客户端库 (https://docs.microsoft.com/en-us/dotnet/api/overview/azure/batch?view=azure-dotnet) 完成此任务的方法。
作为一种解决方法,我尝试向使用commandline 执行的 .bat 文件添加一个简单的复制任务,但由于某种原因它只复制了一些文件。在一项任务中,有几百个文件要复制,并且在停止复制之前它复制了多少部分(没有错误)会有所不同。这是我的复制命令:$"cmd /c xcopy /E /F /Y %AZ_BATCH_TASK_WORKING_DIR%\\..\\..\\{previousTaskId}\\wd %AZ_BATCH_TASK_WORKING_DIR%"。如果直接从 VM 执行,一切都会正常工作。
检验假设:
- 复制会覆盖执行实际处理的 .bat 文件。这反过来又破坏了复制。我现在已经排除了这个问题(每个任务都有一个不同命名的 .bat 文件)
- 出于某种原因,复制是并行完成的。我向蝙蝠添加了时间戳回声,并且没有并行性,所以这不是原因。还尝试在 xcopy 之前添加
sleep 10,但没有任何区别。 - xcopy 出于某种原因看不到所有文件。添加了一个
dir命令来查看有哪些文件,它只查看 xcopy 复制的相同文件。 - 用户访问问题。没有意义,因为某些文件已成功复制并且没有错误。
有什么想法吗?这听起来像是一个微不足道的场景,但我就是不知道该怎么做。
【问题讨论】:
-
您的新任务是否需要之前任务的输出文件?
-
是的,我无法确切知道哪些输出文件以及多少个输出文件,所以如果所有内容都被复制就可以了
-
你是把这些文件存储在你的节点里吗?
-
所有这些任务都在单个节点中执行。我不做并行。
-
你能告诉我你的错误吗?我认为您可以连接到您的节点并自己手动复制文件。
标签: c# azure .net-core azure-batch