Plesk 网站中的 Hangfire 重复工作无法正常工作

Hangfire recurring Job in Plesk website not working

我的 C# MVC 项目在 Global.asax.cs 文件中有以下设置:

 ////hangfire config
 GlobalConfiguration.Configuration
     .UseSqlServerStorage("ContextName", new SqlServerStorageOptions
     {
         CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
         SlidingInvisibilityTimeout = TimeSpan.FromMinutes(15),
         QueuePollInterval = TimeSpan.Zero,
         UseRecommendedIsolationLevel = true,
         UsePageLocksOnDequeue = true,
         DisableGlobalLocks = true
     })
     .UseRecommendedSerializerSettings();
 //.UseLog4NetLogProvider(); // this creates a bunch of logs that inflates the DB, only for testing purposes!

我尝试调整这段代码,但我无法让它在生产环境中工作,在本地它工作正常。

BackgroundJobServer backgroundJobServer = new BackgroundJobServer();
RecurringJob.AddOrUpdate(() => MethodCalling(DateTime parameter), "0 8 * * *");

这在本地有效,但当我将其发布到我的 Plesk 环境时无效。 我也试过这个:

RecurringJob.Trigger("Identifier here");

当然在 AddOrUpdate 方法中设置了标识符,但我认为每次浏览网站时它都会触发。我希望一年中的每一天 运行 上午 08:00。

尝试更改时间:

"00 * * * *" 设置为 运行 每个小时,每个月的每一天,甚至是过时的 Cron.HourInterval(int) 但它似乎在我浏览该网站时被触发,或者如果我不浏览它,则每天触发 +-3 次,似乎可能是 IIS 回收周期?

我也试过改成这样:

BackgroundJob.Enqueue(()=> MethodCalling(DateTime parameter));

当我检查我的数据库(使用 EF)时,我可以清楚地看到它 运行s 但有些配置不正确但我不知道是什么。

欢迎任何建议! 谢谢! (注意:不使用 .NET Core)

首先,让我们根据上面的讨论重新表述一下这个问题。您想要每日触发来初始化一些任务,并想知道当您的解决方案部署到共享托管平台时可以选择哪些选项。

IIS/ASP.NET/ASP.NET Core 不是为此类任务而设计的,在共享托管平台上,您将无法毫无障碍地触发日常工作。

因此,最好的选择是找到一个外部资源(如 Zapier)作为每日触发器,并让它调用您的网络应用程序来初始化作业。