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 作为流分析的输出:连接测试失败