Azure Web 作业总是失败

Azure Web Job always Failed

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

已在配置中增加 WEBJOBS_IDLE_TIMEOUT 和 SCM_COMMAND_IDLE_TIMEOUT,但仍标记为失败。但是还是报错。

Command 'cmd /c ""Software.. ...' was aborted due to no output nor CPU activity for 121 seconds. You can increase the SCM_COMMAND_IDLE_TIMEOUT app setting (or WEBJOBS_IDLE_TIMEOUT if this is a WebJob) if needed.

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

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

这是代码片段。

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();
        }
    }

}

谢谢!只是为了确认您是否启用了 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可能会有帮助。