我有一個非常簡單的django項目,其中包含一個名爲Quote的應用程序模型。django crontab作業不起作用
該應用程序只需執行一個cron作業,每1分鐘執行一次以從數據庫中獲取一個隨機引號,並使用notify-send命令顯示該報價的通知。
我正在使用django-crontab來實現此目標。
的cron.py是如下
from random import randint
from models import Quote
import subprocess, time, os
def notify():
latestQuote = Quote.objects.all().order_by("-id")[0]
max_id = latestQuote.id
quote = Quote.objects.get(pk=randint(1,max_id))
subprocess.Popen(['notify-send',quote.quote])
time.sleep(1)
節目很簡單,這裏是設置模塊中的cron設置
CRONJOBS = [('*/1 * * * *', 'core.cron.notify')]
當執行./manage crontab add
,一個cron命令添加到我的crontab如下
*/1 * * * * /usr/bin/python /home/anas/storage/motinder/manage.py crontab run 5ade4dc167538a33802640eeb92219ad # django-cronjobs for motinder
如果我從系統crontab執行命令,通知顯示成功,但cron作業不會自動執行。
編輯
我改變了代碼在cron.py文件發送一個靜態的通知,而不是讓來自DB的報價。下面的查詢
from random import randint
from models import Quote
import subprocess, time, os
def notify():
#latestQuote = Quote.objects.all().order_by("-id")[0]
#max_id = latestQuote.id
#quote = Quote.objects.get(pk=randint(1,max_id))
#subprocess.Popen(['notify-send',quote.quote])
subprocess.Popen(['notify-send',"TEST"])
time.sleep(1)
不幸的是,情況是一樣的。
您確實不需要第三方應用程序來設置連接器,只需將notify.py配置爲CLI並將其直接添加到crontab即可避免所有這些複雜情況http://stackoverflow.com/documentation/django/5848/django-from-the-line-line#t = 201611230712189521958 – e4c5
欣賞你的評論@ e4c5,但我在這裏指的是使用Django ORM來簡化對數據庫的查詢。還有一點需要注意的是,我嘗試了使用簡單的python腳本的相同方法,除了執行'notify-send'命令之外什麼也不做,但情況保持不變。 – Fanooos
而這正是我的建議。沒有所有這些焦點的焦點。 – e4c5