我有一个非常简单的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