【问题标题】:Hangfire recurring Job in Plesk website not workingPlesk 网站中的 Hangfire 重复作业无法正常工作
【发布时间】:2020-01-20 20:32:01
【问题描述】:

我的 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 方法中设置了标识符,但我认为每次浏览网站时都会触发。我希望它在一年中的每一天早上 8:00 运行。

尝试改变时间:

"00 * * * *" 设置为每小时运行,每月每天运行,甚至使用过时的Cron.HourInterval(int),但它似乎在我浏览该站点时触发,或者如果我不浏览它每天 +-3 次,似乎可能是 IIS 回收可以循环吗?

我也试过改成这样:

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

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

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

【问题讨论】:

  • docs.hangfire.io/en/latest/deployment-to-production/…如果你不能遵循这个,放弃Hangfire。它不是一个可以在所有条件下运行的框架。
  • 您好,谢谢您,如果他们愿意在 IIS 中进行这种配置,我将与我的托管服务提供商核实,我将在后端尽我所能。将在这里发布反馈。同时,您能否针对这种需求提出替代方案?
  • @LexLi,不幸的是,我的托管服务提供商不想在他们这边实施此配置,因为它是共享资源......我需要一个托管 VPS 或每天处理 1 个重复工作的替代逻辑。 ..我不想为此使用计时器或任务,我认为这有点矫枉过正?!任何人都可以为我提供替代方案吗?
  • 那么实际上是您的预算阻止了您在 ASP.NET 中执行此操作。考虑一下外部服务,例如 Zapier,zapier.com/apps/schedule/integrations 它们可以帮助触发日常事件,然后这些事件可用于向您的 ASP.NET 应用程序发送请求(有效地运行您想要的作业)。
  • 我认为应该类似,但 Zapier 有一些免费配额。

标签: c# plesk hangfire


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2016-09-14
    • 2017-12-03
    相关资源
    最近更新 更多