2011-09-28 29 views
1

我在asp.net應用程序中配置了quartz.net,並且我的工作設置爲每天凌晨1點運行。如果我更改job-config.xml文件以使作業在2分鐘內運行,則更改將自動啓動而不重新啓動應用程序池,並且作業被觸發。但是,如果我恢復變更以讓工作再次在凌晨1點起火,那麼它似乎不會起火。我明顯的原因是應用程序池或IIS已重新啓動,這將導致我的asp.net應用程序關閉(實際上關閉quartz.net,因爲它是同一個asp的重要組成部分。 net進程),但爲了測試quartz.net是否仍在運行,沒有任何iisreset或應用程序池回收,我再次更改job-config.xml文件以在2分鐘內再次啓動並運行作業,因此它不會運行,似乎是應用程序池回收或IIS重置發生的情況 - 我不明白。Quartz.NET作業配置爲每天運行一次,第一天工作但未能在隨後的日子裏觸發

我想保持在我的asp.net應用程序下運行的工作,而不必創建一個額外的Windows服務,所以任何幫助將不勝感激。以下是我的quartz.net配置文件的一個片段。

<job> 
<job-detail> 
    <name>xjob</name> 
    <group>MyJobs</group> 
    <description>blah blah</description> 
    <job-type>yyy.xxx,yyy</job-type> 
    <volatile>false</volatile> 
    <durable>true</durable> 
    <recover>false</recover>  
</job-detail> 
<trigger> 
    <cron> 
    <name>xJobTrigger</name> 
    <group>MyJobs</group> 
    <description>blah blah</description> 
    <job-name>xJob</job-name> 
    <job-group>MyJobs</job-group> 
    <cron-expression>0 0 1 * * ?</cron-expression> 
    </cron>  
</trigger> 

謝謝

回答

1

我覺得有一個正在進行幾件事情。正如你所提到的,如果你在asp.net下運行調度器,那麼這個過程可能會被回收,並且當它應該運行時,你的調度器可能無法運行該作業。如果在給定時間運行該作業非常重要,那麼您需要將Quartz.net設置爲服務。

缺少的另一件事是我認爲你正在使用RAM作業撕裂,這意味着當調度程序重新啓動時,它會重新計劃作業,所以在你的情況下,它將不會再次觸發,直到1。調度程序不在1上運行,那麼即使調度程序重新啓動(等等),作業也不會觸發。如果您使用ADO作業存儲,則至少觸發器會持續存在,並且一旦調度程序重新啓動並檢測到失火,作業就會運行。

+0

感謝您的回覆 - 非常感謝。如果這個過程被回收,那麼爲什麼當我在2分鐘內改變了運行特定工作的時間時,這個工作就不需要向站點發出請求或啓動任何東西?這是一致的。我會考察ADO商店 - 我沒有意識到RAM商店就是這種情況。謝謝。 – CraigM

+0

沒有任何細節,我猜測當你重新安排工作並且保持2分鐘時,這個過程已經開始。你可以通過安排工作24小時後運行來測試這一點。如果IIS回收的時間間隔比作業延遲時間短,則永遠不會運行。 – jvilalta

相關問題