【发布时间】:2019-11-05 13:06:53
【问题描述】:
在我们将 Hangfire (v1.7.7) 设置为 always run 后,所有重复作业在我们重新启动 IIS 或回收池后立即执行。这是一种不受欢迎的行为,因为我们安排了每月或每周运行一次的作业,并且每次部署都会使它们运行。
我们在文档或论坛中找不到配置属性来防止这种行为,我们仍在分析 repo,试图找到线索。
我们发现this issue 和this discussion 与我们的问题有关。
除了上面提供的链接,它代表了我们为使 Hangfire 始终运行所做的确切配置,这是我们当前的配置:
private BackgroundJobServer _backgroundJobServer;
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
Authorization = new[] { new HangfireRestrictiveAuthorizationFilter() },
StatsPollingInterval = UM_MINUTO_EM_MILISEGUNDOS * 10
});
GlobalConfiguration.Configuration.UseSqlServerStorage("Implanta", new SqlServerStorageOptions
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SchemaName = "HangFireSiscaf",
SlidingInvisibilityTimeout = null
});
_backgroundJobServer = new BackgroundJobServer(new BackgroundJobServerOptions()
{
Queues = new[] { "siscaf" },
ServerName = "SISCAF.NET",
WorkerCount = 5
});
这就是我们通常安排重复作业的方式(一些方法名称和字符串写在 pt-BR 中):
RecurringJob.AddOrUpdate<ColetaMensalCFATask>(
ColetaMensalCFATask.Key,
x => x.ExecuteTask(),
Cron.Monthly(diaAgendamentoMensalColetaCFA, timeSpanHoraAgendamentoMensalColetaCFA.Minutes),
TimeZoneInfo.Local,
"siscaf");
更新 1: 通过删除作业执行历史并将每个作业添加为新作业,我们能够重现所需的行为。虽然不是一个令人满意的解决方案。
【问题讨论】: