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)作为每日触发器,并让它调用您的网络应用程序来初始化作业。
我的 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)作为每日触发器,并让它调用您的网络应用程序来初始化作业。