Повторяющаяся работа Hangfire ежедневно в определенное время

Я пытаюсь запустить повторяющуюся работу Hangfire ежедневно в 9:00. Вот что я хочу сделать-

RecurringJob.AddOrUpdate(() => MyMethod(), "* 9 * * *");

Где я должен поместить эту строку кода?

Извините, если это глупый вопрос.


person s.k.paul    schedule 03.04.2018    source источник


Ответы (3)


Предположим, вы используете .Net Core, где вы можете найти файл startup.cs. В этом вы можете найти метод Configure(). Внутри метода вы можете использовать этот фрагмент строки сразу после app.UseHangfireDashboard() и app.UseHangfireServer(), который предназначен для настройки панели управления Hangfire, и это необязательно. Не забудьте Зарегистрировать Hangfire Services в методе ConfigureServices(), который можно найти в самом startup.cs.

Вы можете зарегистрировать Hangfire Services внутри ConfigureServices() в Startup.cs.

    public void ConfigureServices(IServiceCollection services)
    {    
    /*
    other services
    */

    services.AddHangfire(x => x.UseSqlServerStorage("YOUR_HangfireServerConnectionString"));

    /*
    services.AddMvc()
    */
    }

Вы можете установить Hangfire Cron внутри Configure() в Startup.cs.

public void Configure(IApplicationBuilder app)
{
    app.UseHangfireDashboard();  
    app.UseHangfireServer();
    RecurringJob.AddOrUpdate(() => MyMethod(), "* 9 * * *");
}

для получения дополнительной информации перейдите по ссылке< /а>

ОБНОВЛЕНИЕ

Выражение cron * 9 * * * означает, что задание будет запускаться каждые минуты после 9 (24-часовой формат) системного времени времени UTC.

Для создания повторяющегося задания ежедневно в 9:00 выражение должно быть 0 9 * * * см. здесь *_*_*" rel="noreferrer">выражения cron

person Farshan    schedule 03.04.2018
comment
Спасибо за ваш ответ. К сожалению, я не использую .net core. - person s.k.paul; 04.04.2018
comment
К вашему сведению, если вы не хотите, чтобы одно и то же задание выполнялось из разных экземпляров, вы должны указать уникальный идентификатор при добавлении cron, как это RecurringJob.AddOrUpdate("YOUR_UNIQUE_STRING",() => MyMethod(), "* 9 * * *"); - person Farshan; 04.04.2018
comment
@s.k.paul Не забывайте в Hangfire о ежедневном расписании. Работает так: RecurringJob.AddOrUpdate(() => MyMethod(), Cron.Daily(9,0)); - person Wlad Neto; 22.03.2019
comment
@WladimirTeixeira Я обновил ответ с помощью выражения cron. Это была незамеченная ошибка, которую я скопировал из вопроса, которая оказала значительное влияние на сервер. - person Farshan; 23.03.2019

В asp.net вы можете добавить Microsoft.Owin Middleware и OwinStartup в свой проект через этот nugetpackage, а затем используйте файл startup.cs для настройки Hangfire. Мы всегда используем метод конфигурации файла Startup.cs для повторяющихся заданий зависания:

            public void Configuration(IAppBuilder app) 
            {
                app.UseHangfireDashboard();
                app.UseHangfireServer();
                RecurringJob.AddOrUpdate(19872.ToString(),() => MyMethod(), Cron.Daily(9, 0));
            }
person rodins    schedule 04.05.2019

Я использую конечную точку веб-API для создания заданий. Я всегда даю повторяющимся заданиям уникальный идентификатор, например guid. Таким образом, если мне нужно отредактировать выражение хрона повторяющихся заданий и обновить его через конечную точку веб-API.

Итак, в веб-API у меня есть: -

[HttpPost]
[Microsoft.AspNetCore.Mvc.Route("daily")]
public IActionResult AddOrUpdateDailyReportJob([FromBody]JobOptions options)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    var result = _clientReportJobCreator.AddOrUpdateDailyClientReport(options.JobId, options.ChronExpression);

    return Ok(result);
}

И такой сервисный метод, который добавляет или обновляет существующее повторяющееся задание.

 public JobCreationResult AddOrUpdateDailyClientReport(string jobId, string chronExpression)
        {
            try
            {
                RecurringJob.AddOrUpdate(jobId, () => _clientDailyReportService.Run(), chronExpression);

                var result = new JobCreationResult
                {
                    JobId = jobId,
                    Success = true
                };

                return result;
            }
            catch (Exception ex)
            {
                var result = new JobCreationResult
                {
                    JobId = jobId,
                    Success = false,
                    Errors = new List<string>()
                    {
                        $"{ex.Message}"
                    }
                };

                return result;
            }
        }
person Derek    schedule 09.04.2018