[英]django crontab job does not work
我有一個非常簡單的 django 項目,它由一個名為 Quote 的應用程序模型組成。
該應用程序只有一個 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 文件中的代碼以發送靜態通知而不是從數據庫獲取報價。 檢查下面
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)
不幸的是,情況是一樣的。
您是否嘗試在 Python 腳本之上使用正確的 Shebang 行並使用chmod +x
使您的文件可執行?
#!/usr/bin/env python
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)
'notify-send'
在哪里? cron
與您的登錄 shell 不在同一環境中運行,因此 python 可能不知道在哪里可以找到它。
如果Popen()
調用失敗,您可以通過強制發生某些事情來幫助自己。 目前,什么都不會發生,因為您沒有捕獲它的任何輸出。
(此外,除非有充分的理由,否則不等待Popen
調用完成通常是不好的。)
subprocess
有各種實用功能可以提供幫助。 試試這個:
def notify():
subprocess.check_call(['notify-send',"TEST"])
這將阻塞直到進程完成,並引發一個異常,如果它失敗,它將被打印到stderr
,例如,因為它找不到'notify-send'
,它應該轉到/var/log/cron
(或可能是/var/log/syslog
在您的系統上?),這將讓您進一步調試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.