1. 程式人生 > >Quartz.net 定時任務在IIS中未按時執行

Quartz.net 定時任務在IIS中未按時執行

IIS 垃圾回收機制下解決Quartz.net 的不執行問題

IIS中涉及了垃圾回收機制,quartz.net 在ASP.NET 專案中可以實現執行緒監控定時執行任務,但是在IIS7.5機一下版本中涉及到IIS的應用程式池在一段時間後被垃圾回收機制回收,從而導致quartz.net 配置的定時服務無法按時啟動。下面來說說如何

本機裝的是IIS7.5,預設的垃圾回收時間間隔為1740分鐘(=29h),29小時內訪問該網站(此處給了我們曲線救國的方針,讓我們有機會瞞過IIS的垃圾回收,以時前文提到的問題得以解決),則,IIS會將後臺的Quartz.net 的執行緒Kill掉,那麼線上程中監控的要定時執行的任務也就不會再繼續執行了。

那麼既然29小時就Kill掉,那麼在29小時內我們再訪問一次網站不就可以了,這個就是瞞天過海的策略,當然為了更保險(可能還會有別的因素導致不到29小時就會被回收,如記憶體啊,重啟啊,什麼的,不太清楚),現在假設Quartz.net 中我們配置的任務是每天凌晨3點執行(這種後臺執行的任務一般都是半夜執行),那麼我們在每天3點前2點55或更早左右,使用某種方法重新啟動一下網站,那麼就不用擔心垃圾回收的機制了。當然,重新啟動網站會開啟一個IE視窗,我們還得記得給關了,要不第二天上班時候被人發現了,還以為你程式碼裡面有鬼呢,呵呵,下面就是方法:

   1:  start iexplore.exe http://*.*.*.*:8080/login.aspx
   2:  ping -n 10 127.0.0.1>nul   
   3:  taskkill /f /im iexplore.exe  /t

將下面三行程式碼(不帶行號)複製到檔案中,儲存成.bat指令碼檔案,這個bat指令碼檔案的意思是:使用IE開啟一個地址為:http://*.*.*.*:8080/login.aspx的頁面然後10秒後再關閉IE (*.*.*.*使用時應該修改成你的網站釋出的IP地址,本地測試的話改成Localhost就可以)127.0.0.1是本機的地址,不用修改,然後再windows的任務管理裡面新增一個Windows task (右鍵我的電腦--管理(Manager)—configuration—task scheduler—Create task )