我不确定它是如何工作的,但让我解释一下我做了什么。我需要调用下面文件夹结构中提到的方法。
proj_application | |- myapp | |-views.py (Method call Inside) |- poll_tracked()
在views.py中,
def poll_tracked(): print('called')
在 settings.py 中我提到过
INSTALLED_APPS = [ 'django_crontab', ] CRONJOBS = [ ('* * * * *', 'myapp.views.poll_tracked', '>>' + os.path.join(BASE_DIR, 'data.log')) ]
然后我运行
python3.7 manage.py crontab add python3.7 manage.py runserver
当我运行 crontab -l 时,我可以看到,
* * * * * /Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 /Users/domain/dashboard/proj_application/manage.py crontab run dceca84af9ceab8a4d39d08fa148969f >>/Users/domain/dashboard/proj_application/data.log # django-cronjobs for proj_application
生成了一个名为 data.log 的新日志文件,但是没有调用提到的 poll_tracked() 方法,并且日志为空。
有人遇到过这个问题吗?如果有,任何帮助我都会很感激。谢谢。
你的问题看起来和 django-crontab 的配置或运行环境有关。以下是一些可能导致问题的原因及解决方案:
django-crontab
poll_tracked()
确保 CRONJOBS 中的 myapp.views.poll_tracked 可以被正确解析。你可以通过以下方式测试:
CRONJOBS
myapp.views.poll_tracked
python3.7 manage.py shell
然后在 Django shell 中运行:
from myapp.views import poll_tracked poll_tracked()
如果没有任何错误并输出 'called',那么导入是正确的;否则,需要检查 views.py 的路径或模块名称。
'called'
views.py
确认 django-crontab 是否正确安装并可用:
pip show django-crontab
如果没有安装,运行以下命令安装:
pip install django-crontab
然后再次尝试运行 python3.7 manage.py crontab add。
python3.7 manage.py crontab add
运行的 python3.7 manage.py crontab add 和 Crontab 配置中使用的 Python 解释器路径是否一致。
你可以通过以下命令检查 Crontab 中的 Python 解释器路径是否正确:
which python3.7
确保与 Crontab 中的路径 /Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 一致。
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7
确保 Crontab 有权限写入日志文件。日志文件的路径 '/Users/domain/dashboard/proj_application/data.log' 必须对运行 Crontab 的用户可写。
'/Users/domain/dashboard/proj_application/data.log'
可以运行以下命令检查文件权限:
ls -l /Users/domain/dashboard/proj_application/data.log
如果权限不足,可以使用以下命令更改权限:
chmod 666 /Users/domain/dashboard/proj_application/data.log
你可以手动运行 Crontab 中生成的命令,验证其是否工作。例如,运行:
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 /Users/domain/dashboard/proj_application/manage.py crontab run dceca84af9ceab8a4d39d08fa148969f
这应该调用 poll_tracked() 并打印 called。
called
确认你的操作系统的 Cron 服务已启用。运行以下命令检查:
sudo service cron status
如果未启用,启动 Cron 服务:
sudo service cron start
将 Cron 的错误输出重定向到另一个日志文件以进行调试:
CRONJOBS = [ ('* * * * *', 'myapp.views.poll_tracked', '>>' + os.path.join(BASE_DIR, 'data.log') + ' 2>>' + os.path.join(BASE_DIR, 'error.log')) ]
检查 error.log 文件中是否有任何错误提示。
error.log
如果 poll_tracked 方法依赖于 Django 环境变量(如数据库连接或设置文件),确保 Cron 作业执行时加载了 Django 设置。你可以显式指定 DJANGO_SETTINGS_MODULE:
poll_tracked
DJANGO_SETTINGS_MODULE
export DJANGO_SETTINGS_MODULE=proj_application.settings
在 Cron 作业中也可以手动指定:
* * * * * DJANGO_SETTINGS_MODULE=proj_application.settings /Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 /Users/domain/dashboard/proj_application/manage.py crontab run dceca84af9ceab8a4d39d08fa148969f >> /Users/domain/dashboard/proj_application/data.log
按照上述步骤逐一检查问题,尤其是: - 确认 poll_tracked() 是否正确被导入。 - 检查 Crontab 是否可以运行对应的命令。 - 验证日志文件是否有写入权限。 - 确保 Cron 服务正在运行。
完成这些步骤后,应该能够成功调用 poll_tracked() 方法并记录日志。