我们正在测试一个新的 WebJob,以在 Azure Web 服务中运行一些后台进程。 WebJob 有一个 TimerTrigger,每 1 分钟运行一次。
我们正处于开发的早期阶段,因此现在代码所做的就是每次运行时都记录到我们的数据库。
我们看到记录被插入到我们的数据库中,因此我们删除了 WebJob 来测试其他一些事情。我们发现,通过门户删除 WebJob 后,记录继续插入到数据库中。我们继续完全停止应用服务,但记录仍然继续插入数据库中。
This SO post建议通过 azure cli 检查事件,但是,会返回一个空数组(如果我们将“触发”替换为“连续”,则结果相同):
az webapp webjob triggered list --name my-app-name --resource-group my-rg-name
WebJob 已被删除,Azure 应用服务已停止大约一个小时,但我们仍然每分钟都会将记录插入到数据库中。
我们的程序并不比提供的 .NET Core 示例复杂多少 here (GitHub Azure WebJobs SDK Extensions)
我们有一个简单的 Program.cs:
var builder = new HostBuilder();
builder.ConfigureWebJobs(b =>
{
b.AddTimers();
});
builder.ConfigureLogging((context, b) =>
{
b.AddConsole();
});
var host = builder.Build();
using (host)
{
await host.RunAsync();
}
函数.cs
public async Task Run([TimerTrigger("0 */1 * * * *")] TimerInfo myTimer, ILogger logger)
{
var connection = _db.Connection;
await connection.ExecuteAsync("INSERT INTO webjob_logs VALUES ('test', GETDATE())");
}
设置.作业
{
"schedule": "0 */1 * * * *"
}
更新
最佳答案
我们几乎没有什么选项可以删除正在运行的 Web 作业。
一种是手动删除。
另一种是使用 Azure CLI 命令,您已经按照我之前的 answer 完成了该命令。 .
还有一个选项是删除创建 Web 作业时上传的整个文件。
每当创建 Web 作业时,都会在 KUDU 控制台 site/wwwroot/App_Data
文件夹中创建一个名为 Jobs
的新文件夹。
- 它包含所有作业以及与 Web 作业相关的所需
exe/pdb/dll
文件。
- 删除具有您要删除的特定 Web 作业名称的整个文件夹。
有时,即使删除 Web 作业后,这些作业也会在我们不知情的情况下在后台运行。
如 MSDoc 中所述,在应用服务应用程序设置中将键 WEBJOBS_STOPPED
设置为值 1
以停止 WebJobs。
谢谢@IKriKan以获得提示。
如果您对 Web 作业仍有任何问题,可以在以下位置查看作业详细信息
诊断和解决问题
=> 可用性和性能
=> WebJob 详细信息
关于Azure WebJob 在删除和 Web 应用程序停止后运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77019665/