执行 VBS 文件的 Azure 批处理任务问题
Azure Batch Task problem executing a VBS file
我正在尝试将 VBS 文件作为 Azure 批处理任务启动,但我不断收到无法找到脚本文件的错误。
这是一个有效的命令:
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 Version 5.8 Copyright (C) Microsoft
Corporation. All rights reserved.
Input Error: Can not find script file
"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 文件有它。
这将有助于更好地理解,基本上简短的回答是:
此处参考文献:https://docs.microsoft.com/en-us/azure/batch/batch-application-packages
Similar to a pool, you specify application package references for a
task. When a task is scheduled to run on a node, the package is
downloaded and extracted just before the task's command line is
executed. If a specified package and version is already installed on
the node, the package is not downloaded and the existing package is
used.
详情
就像我在评论中提到的,如果你有不同版本的应用程序包,建议使用它。
很高兴您正在探索这些错误,因为这将有助于围绕您的应用程序更好地设计此概念。
建议
例如:If you have all tasks sharing same application package, I would recommend using Pool Level app pkgs
https://docs.microsoft.com/en-us/azure/batch/batch-application-packages#install-pool-application-packages
If you have task level and you are changing the content of existing app pkgs
然后使用带版本的应用程序 pks 并根据应用程序 pkgs 的不同内容使版本不同。
此处详细介绍了版本的工作原理:
额外内容:
关于环境变量和类型的详细信息:https://docs.microsoft.com/en-us/azure/batch/batch-compute-node-environment-variables
常见陷阱
- 如果用户应用程序通过 API 或手动上传应用程序包,请确保包已正确上传,Programmaticvally 通常
non async
行为会导致问题,因此在 Batch 创建池并继续之前始终等待上传完成。
我正在尝试将 VBS 文件作为 Azure 批处理任务启动,但我不断收到无法找到脚本文件的错误。
这是一个有效的命令:
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 Version 5.8 Copyright (C) Microsoft Corporation. All rights reserved.
Input Error: Can not find script file "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 文件有它。
这将有助于更好地理解,基本上简短的回答是:
此处参考文献:https://docs.microsoft.com/en-us/azure/batch/batch-application-packages
Similar to a pool, you specify application package references for a task. When a task is scheduled to run on a node, the package is downloaded and extracted just before the task's command line is executed. If a specified package and version is already installed on the node, the package is not downloaded and the existing package is used.
详情
就像我在评论中提到的,如果你有不同版本的应用程序包,建议使用它。
很高兴您正在探索这些错误,因为这将有助于围绕您的应用程序更好地设计此概念。
建议
例如:
If you have all tasks sharing same application package, I would recommend using Pool Level app pkgs
https://docs.microsoft.com/en-us/azure/batch/batch-application-packages#install-pool-application-packagesIf you have task level and you are changing the content of existing app pkgs
然后使用带版本的应用程序 pks 并根据应用程序 pkgs 的不同内容使版本不同。
此处详细介绍了版本的工作原理:
额外内容:
关于环境变量和类型的详细信息:https://docs.microsoft.com/en-us/azure/batch/batch-compute-node-environment-variables
常见陷阱
- 如果用户应用程序通过 API 或手动上传应用程序包,请确保包已正确上传,Programmaticvally 通常
non async
行为会导致问题,因此在 Batch 创建池并继续之前始终等待上传完成。