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可能会有帮助。
我有这个每周六运行的 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://
还建议您 Program.cs 中的触发工作,
尝试更换
host.Run()
;通过 host.Start()
;
进一步你也可以参考this blog可能会有帮助。