2012-04-30 10 views
6

Tengo que ejecutar el trabajo todos los días a la medianoche, hora del Pacífico. Estoy usando MVC3 con la biblioteca Quartz.NET.¿Cómo comenzar un trabajo todos los días a la misma hora en Quartz.net?

Aquí está mi código:

public static void ConfigureQuartzJobs() 
{ 
    ISchedulerFactory schedFact = new StdSchedulerFactory(); 

    IScheduler sched = schedFact.GetScheduler(); 

    DateTime dateInDestinationTimeZone = System.TimeZoneInfo 
     .ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, System.TimeZoneInfo.Utc.Id, "Pacific Standard Time").Date; 


    IJobDetail job = JobBuilder.Create<TimeJob>() 
     .WithIdentity("job1", "group1") 
     .Build(); 

    ITrigger trigger = TriggerBuilder.Create() 
     .WithIdentity("trigger1", "group1") 
     .StartAt(dateInDestinationTimeZone) 
     .WithSimpleSchedule(x => x.WithIntervalInHours(24).RepeatForever()) 
     .Build(); 

    sched.ScheduleJob(job, trigger); 

    sched.Start(); 
} 

Este código hace que este trabajo se ejecute sólo una vez en un primer momento la medianoche (en hora del Pacífico). He establecido .WithSimpleSchedule(x => x.WithIntervalInHours(24).RepeatForever()) pero no está funcionando; el trabajo no se repite todos los días.

¿Qué puedo hacer para que funcione todos los días?

Cualquier ayuda muy apreciada!

Respuesta

4

¿Están sus tareas programadas alojadas en la aplicación web? Si es así, puede experimentar tales problemas. Las aplicaciones web no son adecuadas para ejecutar tareas programadas. En su lugar, debería crear un servicio de Windows que aloje tareas programadas.

Pero también hay algunas cosas que usted puede comprobar:

  1. trate de usar período más corto de tiempo (es decir, comprobar si esto funciona si se establece el intervalo de 1 minuto).
  2. Pruebe CronTrigger - Lo estoy usando en el servicio de Windows y funciona bien.

Hay algunos artículos que explican los pros y los contras de hospedar tareas programadas en la aplicación web, es decir. este: http://www.foliotek.com/devblog/running-a-scheduled-task/.

+0

Utilicé CronTrigger - no está funcionando a la perfección. No funciona exactamente cuando debería, pero lo suficientemente cerca. – Marta

+0

CronTrigger parece útil –

+0

En mi caso, reducir el intervalo de tiempo de 30 minutos a 5 minutos hace que el trabajo funcione correctamente. – dsm

Cuestiones relacionadas