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 )

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章