LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Quartz.NET网站定时任务 每周凌晨1点更新无法执行,如何解决?

admin
2021年3月8日 12:26 本文热度 3912
Global.asax 代码:
IScheduler sched;
        private void Application_Start(object sender, EventArgs e)
        {
            ISchedulerFactory sf = new StdSchedulerFactory(); 
            IScheduler sched = sf.GetScheduler();
            IJobDetail job = JobBuilder.Create<TimingTask>().WithIdentity("sport_quan_job""sport_quan_group").Build();
            ITrigger trigger = TriggerBuilder.Create().WithIdentity("sport_quan_job""sport_quan_group").WithCronSchedule(PubConfig.CronExpr).Build(); 
            sched.ScheduleJob(job, trigger); 
            sched.Start();
 
            LogHelper.WriteLog("Application_Start""Application_Start");
        }
 
        private void Application_End(object sender, EventArgs e)
        {
            LogHelper.WriteLog("Application_End""Application_End");
            // 在应用程序关闭时运行的代码 
            if (sched != null) { sched.Shutdown(true); }
        }

TimingTask.cs 实现接口IJob:
        public void Execute(IJobExecutionContext context)
        {
            try
            {
                if (System.DateTime.Now.Hour == 1)
                {
                    DataSet dsArrange = new stadium_arrange().SelectArrangeList();
                    long result = ArrangeHelper.InsertScheduleOfField(dsArrange);
                    if (result > 0)
                    {
                        LogHelper.WriteLog("更新排班""定时更新排班成功!");
                    }
                    else
                    {
                        LogHelper.WriteLog("更新排班""暂无更新!");
                    }
                }
                else
                {
                    LogHelper.WriteLog("定时任务""仅执行定时任务,不作更新排班操作!");
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog("程序异常", ex.Message);
                JobExecutionException e2 = new JobExecutionException(ex);
                // this job will refire immediately
                e2.RefireImmediately = true;
                throw e2;
            }
        }

web.config 配置:
<!--Quartz[0 0 1 * * ?] 配置项 每天凌晨1点更新-->
    <add key="cronExpr" value="0 0 1 * * ?"/>

这两天执行的日志如下:

2014年9月17日_log.txt

标题: Application_Start
内容: Application_Start
时间: 2014/9/17 19:30:38
---------------------------------------------

标题: Application_Start
内容: Application_Start
时间: 2014/9/17 20:52:03
---------------------------------------------

标题: Application_End
内容: Application_End
时间: 2014/9/17 21:08:02
---------------------------------------------

标题: Application_Start
内容: Application_Start
时间: 2014/9/17 22:02:32
---------------------------------------------

标题: Application_End
内容: Application_End
时间: 2014/9/17 22:23:32
---------------------------------------------

2014年9月18日_log.txt

标题: Application_Start
内容: Application_Start
时间: 2014/9/18 4:25:39
---------------------------------------------

标题: Application_End
内容: Application_End
时间: 2014/9/18 4:38:39
---------------------------------------------

标题: Application_Start
内容: Application_Start
时间: 2014/9/18 9:05:39
---------------------------------------------

问题来了,即没有执行凌晨一点的定时任务,而且中间还隔了几个小时未记录任务日志,求各位大神支招!!!

该文章在 2021/3/8 12:26:21 编辑过

全部评论4

admin
2021年3月8日 12:26
我的Quartz.NET 版本是最新版,貌似没有JobDetail 和 CronTrigger ,当网站白天在运行时,也确实可以实现,但是一到晚上长时间没有联机网站,貌似就不能执行,连日志都没有,所以应该不是功能的问题吧。。。
admin
2021年3月8日 12:27
因为你的服务停了,就不会记录了
每次停止后,加唤醒程序,就可以了

该评论在 2021/3/8 12:27:04 编辑过
admin
2021年3月8日 12:28
IIS问题,时间长了没人访问会失效,增加个 模拟点击网站网页 功能。。在一般处理程序里面写:

该评论在 2021/3/8 12:28:34 编辑过
admin
2021年3月8日 12:30
  1. 首先不要设置iis自动回收,一般设置凌晨1-2点左右回收一次,当凌晨iis回收应用程序池的时候,会调用Application_End,执行里面的代码,  
  2. 重新启动网站,建议定时器的代码放在Session_Start里面,因为  
  3. Application_Start只有再第一个用户访问网站的时候才会触发该方法,通常会在该方法里定义一些系统变量,如聊天室的在线总人数统计,  
  4. 历史访问人数统计的初始化等等均可在这里定义.所以第一次访问的时候会先进入Application_Start,  
  5. 然后再进入Session_Start。但是以后每次访问的时候进入的是Session_Start  
  6. 第一个访问网站的用户会触发该方法.     
  7.   
  8. Application_Start()  
  9.     {  
  10.       
  11.   
  12.     }  
  13. //每个用户访问网站的第一个页面时触发;  
  14.     void Session_Start(object sender, EventArgs e)  
  15.     {  
  16.       LogHelper.WriteInfoLog("触发Session_Start事件,准备执行定时任务:" + DateTime.Now);  
  17.   
  18.       #region 定时任务  
  19.       System.Threading.Thread myTimer = new System.Threading.Thread(new System.Threading.ThreadStart(Timer_Write));  
  20.       myTimer.Start();  
  21.       #endregion  
  22.   
  23.     }  
  24. //网站关闭,或重启时,会触发该方法.  
  25.   
  26.     void Application_End(object sender, EventArgs e)  
  27.     {  
  28.       //下面的代码是关键,可解决IIS应用程序池自动回收的问题  
  29.       System.Threading.Thread.Sleep(1000);  
  30.       //触发事件, 写入提示信息  
  31.       LogHelper.WriteInfoLog("触发Application_End事件,正在重新启动网站:" + DateTime.Now);  
  32.       //这里设置你的web地址,可以随便指向你的任意一个页面甚至不存在的页面,目的是要激发Session_Start  
  33.   
  34.       //使用您自己的URL  
  35.       string url = "你的网址";  
  36.       System.Net.HttpWebRequest myHttpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);  
  37.       System.Net.HttpWebResponse myHttpWebResponse = (System.Net.HttpWebResponse)myHttpWebRequest.GetResponse();  
  38.       System.IO.Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流  
  39.   
  40.     }  


该评论在 2021/3/8 12:30:03 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved