【问题标题】:Azure Batch Task problem executing a VBS file执行 VBS 文件的 Azure Batch Task 问题
【发布时间】:2019-02-04 18:23:32
【问题描述】:

我正在尝试将 VBS 文件作为 Azure Batch 任务启动,但我不断收到无法找到脚本文件的错误。

这是一个有效的命令:

string appPath = String.Format("%AZ_BATCH_APP_PACKAGE_{0}#{1}%", appPackageId, appPackageVersion);
string taskCommandLine = String.Format("cmd /c {0}\\ffmpeg-3.4-win64-static\\bin\\ffmpeg.exe -i {1} -vcodec libx264 -crf 28 -c:a aac -b:a 128k {2} & del {3} & rename {4} {5}", appPath, inputMediaFile, outputMediaFile, inputMediaFile, outputMediaFile, inputMediaFile);

这个工作正常,但在输入文件上触发 ffmpeg 之前,我想先用 ffprobe 做一些检查,然后用 .bat 做一些检查,所以我很难在 VBScript 中做。

string appPath = String.Format("%AZ_BATCH_APP_PACKAGE_{0}#{1}%", appPackageId, appPackageVersion);
string taskCommandLine = String.Format("cmd /c cscript {0}\\ffmpeg-3.4-win64-static\\bin\\scan_run1.vbs {1} {2}", appPath, inputMediaFile, outputMediaFile);

结果:

Microsoft (R) Windows Script Host 版本 5.8 版权所有 (C) Microsoft 公司。保留所有权利。

输入错误:找不到脚本文件 "D:\batch\tasks\applications\ffmpeg3.42019-02-01-19-50\ffmpeg-3.4-win64-static\bin\scan_run1.vbs"

我很确定 vbs 在那里,因为在完全相同的位置调用 ffmpeg.exe 可以正常工作。

当我将 ZIP 文件作为包上传时,Azure 门户是否会从 ZIP 文件中删除 VBS?那里发生了什么?

谢谢。


原来当我替换应用程序包时,Azure 门户并没有更新它。所以它有“scan_run.vbs”但没有“scan_run1.vbs”,即使我端的ZIP文件有它。

【问题讨论】:

  • 我认为还有别的东西,所以你的任务有一个包,你用 *.bat 更新了它,它工作了,然后一旦你用新文件更新了包 == 1) 你重新上传包了吗? 2) 您是否将它作为另一个任务或相同任务重新运行? docs.microsoft.com/en-us/azure/batch/batch-application-packages 环境变量的设置方式等有很多细节。应用程序包是池级别或任务级别,在您的情况下,场景是任务级别。
  • Continue... 如果您使用batch-explorer 之类的工具,您将能够挖掘节点中的折叠结构并查看文件是否存在。对我来说,这是某些user error 类别的明显案例,您是否尝试过使用版本号?它适用于版本号吗? 请注意 If a specified package and version is already installed on the node, the package is not downloaded and the existing package is used. 请告诉我进展如何。谢谢。
  • Further:这与您在 zip 本地看到的内容无关,当您使用新内容更新现有的包并在现有节点中尝试它时一切都取决于节点级别的机制,即如果您有不同版本的包,请参考我分享的链接。首先,尝试使用版本和包,其次,如果您过于频繁地更改相同的包,那么明智的设计我建议您使用应用程序版本功能,第三,如果您想更新相同的包,您需要确保任务具有支持机制到位。

标签: azure batch-processing azure-batch


【解决方案1】:

这将有助于更好地理解,基本上简短的回答是这样的:

此处参考文档:https://docs.microsoft.com/en-us/azure/batch/batch-application-packages

与池类似,您可以为一个池指定应用程序包引用 任务。当一个任务计划在一个节点上运行时,包是 在任务的命令行之前下载并解压 执行。 如果指定的包和版本已经安装在 节点,包没有下载,现有包是 使用过

详情

正如我在 cmets 中提到的,如果您有不同版本的应用程序包,建议使用。

很高兴您正在探索这些错误,因为这将有助于围绕您的应用程序更好地设计此概念。

建议

这里详细介绍了版本的工作原理:

附加:

常见问题

  • 如果用户应用程序通过 API 或手动上传应用程序 pkgs,请确保正确上传包,Programmaticvally 通常non async 行为会导致问题,因此请始终等待上传以在 Batch 创建池并继续之前完成。

【讨论】:

  • 我的所有任务确实使用相同的包,但我发现在任务级别使用包使得任务始终具有最新的包内容。有什么理由不这样做吗?
  • @FrancisDucharme 没错,你现在正在考虑用户场景很好,问题 Since all your task need that same App package, why Pool scenario is not fitting your use case? 是因为你的应用程序包不断变化吗?还有你是如何上传你的包的?
  • 目前是测试目的,所以内容经常变化,但一旦稳定,我想我可以在池级别使用它。我正在使用 Batch Explorer(桌面应用)上传它
  • @FrancisDucharme Saweet,听起来不错,所以它只用于 POC(概念证明),那么我认为这看起来很酷,只要你遵循池级别的方法,如果包对所有人都是一样的.对于您当前经常更改任务级别应用程序 pkgs 的 POC 方法,请确保您使用 unique app id and version 上传新版本以获取任务,还要注意这些 MAX docs.microsoft.com/en-us/azure/batch/… 我希望这为您的解决方案设计提供了更好的思路:)您还需要确保在任务运行之前上传 pkgs
猜你喜欢
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
相关资源
最近更新 更多