You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Batch任务始终处于Active状态,请求缺失api-version参数

Azure Batch任务卡Active+api-version缺失问题排查与修复

1. 修复api-version缺失问题

如果是手动构造Batch REST请求,必须在URL中添加api-version查询参数(例如api-version=2024-02-01.17.0,需匹配Batch服务支持的版本)。如果使用官方Microsoft.Azure.Batch SDK,确保使用最新版本(如16.0.0+),SDK会自动注入api-version参数,无需手动配置。

错误示例(手动请求未加参数):

var request = new HttpRequestMessage(HttpMethod.Post, "https://<account>.batch.azure.com/jobs/<job-id>/tasks");

修正后的手动请求:

var uriBuilder = new UriBuilder("https://<account>.batch.azure.com/jobs/<job-id>/tasks");
uriBuilder.Query = "api-version=2024-02-01.17.0";
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

2. 任务卡Active状态的核心排查与修复

任务持续处于Active状态通常由以下原因导致,逐一排查:

命令行配置修正

确保命令行能在计算节点上正确执行:

  • 若远程应用在计算节点PATH中,直接写:myapp.exe %AZ_BATCH_TASK_WORKING_DIR%\input.txt
  • 若应用不在PATH,使用绝对路径:C:\apps\myapp.exe %AZ_BATCH_TASK_WORKING_DIR%\input.txt
  • 配合资源文件配置,确保Blob文件正确下载到任务工作目录:
var resourceFile = new ResourceFile(
    httpUrl: $"https://<storage-account>.blob.core.windows.net/<container>/<filename>?<sas-token>",
    filePath: "<filename>"
);
var task = new CloudTask(taskId, commandLine)
{
    ResourceFiles = new List<ResourceFile> { resourceFile }
};

任务完成检测配置优化

退出码检测(默认机制)

确保应用执行完成后返回0作为退出码,若需兼容非0退出码视为完成,配置如下:

task.ExitConditions = new ExitConditions
{
    ExitCodeRanges = new List<ExitCodeRangeMapping>
    {
        new ExitCodeRangeMapping(0, 255, ExitOptions.Complete)
    }
};

文件检测机制

若依赖应用生成的输出文件判断完成,配置输出文件规则及完成条件:

task.OutputFiles = new List<OutputFile>
{
    new OutputFile(
        filePattern: @"result.txt",
        destination: new OutputFileDestination(
            new OutputFileBlobContainerDestination(
                containerUrl: "https://<storage-account>.blob.core.windows.net/<output-container>?<sas-token>",
                path: "<task-id>/result.txt"
            )
        ),
        uploadOptions: new OutputFileUploadOptions(
            uploadCondition: OutputFileUploadCondition.TaskSuccess
        )
    )
};

task.ExitConditions = new ExitConditions
{
    FileUploadError = new ExitOptions(ExitCode.Complete),
    PreProcessingError = new ExitOptions(ExitCode.Complete)
};

权限与网络排查

  • 确保计算节点能访问Blob存储:使用SAS URL,或给Batch账户分配Storage Blob Data Reader角色
  • 查看计算节点的任务日志(stdout.txt/stderr.txt),定位命令执行错误(如文件缺失、应用找不到等)

3. 调试与任务等待优化

等待任务完成时,需定期刷新任务状态:

var tasks = batchClient.JobOperations.ListTasks(jobId).ToList();
foreach (var task in tasks)
{
    do
    {
        task.RefreshAsync().Wait();
        Thread.Sleep(1000);
    } while (task.State != TaskState.Completed);
    
    Console.WriteLine($"Task {task.Id} completed with state {task.State}");
}

同时可开启Batch诊断日志,查看API请求的详细错误信息,确认api-version参数是否正常传递。

内容的提问来源于stack exchange,提问作者David Alejandro García García

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:39:51