Azure Web 作业总是失败

Posted

技术标签:

【中文标题】Azure Web 作业总是失败【英文标题】:Azure Web Job always Failed 【发布时间】:2021-11-08 11:17:03 【问题描述】:

我有这个每周六运行的 Azure WebJob 函数。但是 Azure 函数总是标记为失败,但是当我检查日志时,作业在完成后成功运行。

已在配置中增加 WEBJOBS_IDLE_TIMEOUT 和 SCM_COMMAND_IDLE_TIMEOUT 但仍标记为失败。但是还是出现这个错误。

命令 'cmd /c ""Software.. ...' 由于 121 秒内没有输出或 CPU 活动而中止。如果需要,您可以增加 SCM_COMMAND_IDLE_TIMEOUT 应用设置(或 WEBJOBS_IDLE_TIMEOUT,如果这是 WebJob)。

要处理的数据数量是不可预测的,它取决于输入值的用户数量,因此处理时间在 1 到 40 分钟之间,最少数据为 1 分钟,较大数据为 40 分钟。

我目前正在使用最新版本的 WebJob SDK。

这是代码 sn-p。

public class ProcessDataFunction

    private readonly IProcessData _processData;

    public ProcessDataFunction(IProcessData processData)
    
        _processData = processData;
    

    [Singleton]
    public async Task ProcessDataMessage([TimerTrigger("0 0 12 * * 6", RunOnStartup = true)] TimerInfo myTimer, ILogger logger, CancellationToken cancellationToken)
    
        logger.LogInformation("Long running Job Started...");

        var dateSync = DateTimeOffset.UtcNow;

        await _processData.ProcessAsync(cancellationToken, dateSync);

       logger.LogInformation("Long running Job Finished...");
    


class Program

    static async Task Main()
    
        var builder = new HostBuilder();
        builder.ConfigureWebJobs(b =>
        
            b.AddTimers();
            b.AddAzureStorageCoreServices();

        );
        builder.ConfigureLogging((context, b) =>
        
            b.AddConsole();
        );
        builder.ConfigureServices((context, services) =>
        
            services.ConfigureHttpClients(context.Configuration)
                .ConfigureDataProcessor()
                .ConfigureDbContext(context.Configuration);
        );
        
        var host = builder.Build();
        using (host)
        
            await host.RunAsync();
        
    


【问题讨论】:

【参考方案1】:

谢谢!只是为了确认您是否启用了Always on 设置?正如document中提到的:

“Web 应用程序可以在 20 分钟不活动后超时,并且只有对实际 Web 应用程序的请求才能重置计时器。在 Azure 门户中查看应用程序的配置或向高级工具站点 (https://.scm.azurewebsites.net) 发出请求不会重置计时器。如果将 Web 应用设置为连续运行、按计划运行或使用事件驱动的触发器,请在 Web 应用的 Azure 配置页面上启用始终开启设置。 Always on 设置有助于确保这些类型的 WebJobs 可靠地运行。此功能仅在基本、标准和高级定价层中可用。 “

还建议您在 Program.cs 中触发作业, 尝试更换 host.Run();由host.Start();

您还可以参考this blog 可能会有所帮助。

【讨论】:

是的,Always On 已启用。我还将 host.RunAsync() 替换为 host.StartAsync() ,它现在可以工作了。谢谢

以上是关于Azure Web 作业总是失败的主要内容,如果未能解决你的问题,请参考以下文章

从存储容器恢复 Azure Linux webapp 备份失败 PowerShell

使用 Azure Function 作为流分析的输出:连接测试失败

使用 PowerBi 的 Azure 流分析失败

创建流分析作业时授权失败

Web 窗体 Azure 活动目录:加载资源失败:服务器响应状态为 401

Node.js 项目的 Azure Web 服务部署失败