Jak ustawić serwer, aby uruchamiał cron po długim okresie bezczynności.

0

Mój projekt wykonany jest w środowisku .NET5
Przykład:

Mam ustawiony haromonogram Quartz.NET z Cron oraz zadaniem wysyłającym maile wszystko działa w krótkim interwale czasowym.
Na serwerze do testów ustawiłem interwał dniowy - docelowo będzie tygodniowy.
Dodatkowo skonfigurowałem Pools podpiętą do projektu z ustawieniami.
Niestety Cron następnego dnia nie startuje - na co zwrócić jeszcze uwagę na serwerze?

Zgodnie z poniższymi zaleceniami

https://newbedev.com/quartz-net-scheduler-doesn-t-fire-jobs-triggers-once-deployed
https://www.py4u.net/discuss/1170832

Start Mode: AlwaysRunning
Limit Interval (minutes): 0
Regular Time Interval (minutes): 0

1

Jak to cron nie startuje? Może usługa dezaktywowana? Źle wpisy zrobione w crontabie?

3

Pokaż cy... kod.

0

P0oniżej ustawienia w aplikacji

services.AddQuartz(q =>
                     {
                   //      q.UseMicrosoftDependencyInjectionScopedJobFactory();
                   //      // Register the job, loading the schedule from configuration
                   //      q.AddJobAndTrigger<SendEmailQualityControlJob>(hostContext.Configuration);
                   //  });
                   //services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true);

                 q.UseMicrosoftDependencyInjectionJobFactory();

                 // Create a "key" for the job
                 var jobKey = new JobKey("SendEmailQualityControlJob");

                 // Register the job with the DI container
                 q.AddJob<SendEmailQualityControlJob>(opts => opts.WithIdentity(jobKey));
                   
                         // Create a trigger for the job
                         q.AddTrigger(opts => opts
                      
                       .WithIdentity("SendEmailQualityControlJob-trigger").WithCronSchedule("00 00 10 ? * WED ").ForJob(jobKey).StartNow());
1

Najlepiej nie wdrażać tego w ramach IIS na rzecz dedykowanej aplikacji / usługi.

1

Co to znaczy "Fajnie by to było jednak uruchomić w aplikacji" ? Chcesz to uruchomić w ramach tej samej instancji aplikacji web? Jeżeli tak, to czemu? Z kodu i poprzedniego wątku wnioskuję, że wysyłasz maile na podstawie danych dostępnych w bazie, więc nie ma sensu robić tego w ramach procesu IIS.

0

Do takich rzeczy korzysta się z wbudowanych mechanizmów na serwerze. Aplikacja, zwłaszcza na współdzielonym, może być w jakiś sposób uśpiona, jeśli nie jest używana. Wtedy taki "cron" w ramach aplikacji może nie zadziałać, albo może działać dziwnie. Dlatego wykorzystujemy serwerowe rozwiązania. Np. na HostedWindows jest CRON, który może robić predefiniowane zadania lub customowe. Jeśli chodzi o customowe zadanie, po prostu wystawia się mu jakieś api. Tzn. CRON uruchamia jakiś endpoint po prostu. Może mieć swoje własne dane autoryzacyjne. I ja to szanuję :)

1

@przemo27ns: Ok. Rozumiem. Zakładam, że aplikacja jest hostowana w modelu In-Process ? Wydaje się, że wówczas mogły występować problemy bo IIS restartuje pule w przypadku potrzeby.
Mimo wszystko, ja wolałbym taki proces mieć osobno bo kiedy będzie potrzeba wystawienia aplikacji web na wielu serwerach dla potrzeb np. load balancera, to może pojawić się problem. Oczywiście podany sposób też jest rozwiązaniem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1