2011-08-19 73 views
1

我試圖讓Django-cron運行,但它似乎只能在點擊該網站後運行一次。我正在使用Virtualenv。Django:正在運行Django-cron

任何想法,爲什麼它只運行一次?

在我的道路,我加django_cron的位置: '/用戶/ emilepetrone /工作區/ zapgeo/zapgeo/django_cron'

我Django應用程序中我cron.py文件:

from django_cron import cronScheduler, Job 

from products.views import index 

class GetProducts(Job): 

    run_every = 60 

    def job(self): 
     index() 

cronScheduler.register(GetProducts) 

class GetLocation(Job): 

    run_every = 60 

    def job(self): 
     index() 

cronScheduler.register(GetLocation) 
+0

在我的情況下,它定期運行(第二次沒有擊中),不是根據** run_every **,而是*更多的間隔*。該工具是否需要*最小間隔*? – sergzach

+0

我發現第二個原因。請再次查看我的答案。 – sergzach

回答

1

第一個可能的原因

有一個在django_cron可變/ base.py

# how often to check if jobs are ready to be run (in seconds) 
# in reality if you have a multithreaded server, it may get checked 
# more often that this number suggests, so keep an eye on it... 
# default value: 300 seconds == 5 min 
polling_frequency = getattr(settings, "CRON_POLLING_FREQUENCY", 300) 

因此,檢查時間,開始你的任務的最小時間間隔爲polling_frequency。你可以在你的項目中settings.py設置進行更改:

CRON_POLLING_FREQUENCY = 100 # use your custom value in seconds here 

要開始啓動Django的Web服務器後工作打你的服務器至少一次。

第二個可能的原因

你的工作有一個錯誤,它不排隊(排隊標誌設置爲「F」如果你的工作提出了一個例外)。在這種情況下,它存儲在表'django_cron_job'字符串值'f'的字段'排隊'中。您可以測試它使查詢:

select queued from django_cron_job;

如果你改變你的工作的代碼字段可留爲「F」。所以,如果你糾正了你的工作錯誤,你應該在排隊字段中手動設置:'t'。或者表在表中執行 django_cron_cron是't'。這意味着你的應用程序。服務器在您的任務正在進行時停止。在這種情況下,您應該手動將其設置爲'f'。