我有以下内容:
python manage.py crontab show # this command give following
Currently active jobs in crontab:
12151a7f59f3f0be816fa30b31e7cc4d -> ('*/1 * * * *', 'media_api_server.cron.cronSendEmail')
我的应用程序处于虚拟环境(env)处于活动状态
在我的media_api_server / cron.py中,我有以下功能:
def cronSendEmail():
print("Hello")
return true
在settings.py模块中:
INSTALLED_APPS = (
......
'django_crontab',
)
CRONJOBS = [
('*/1 * * * *', 'media_api_server.cron.cronSendEmail')
]
对我来说,所有定义都已到位,但是当我在虚拟环境中运行python manage.py runserver时,控制台不会打印任何东西。
System check identified no issues (0 silenced).
July 26, 2016 - 12:12:52
Django version 1.8.1, using settings 'mediaserver.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
' Django的crontab的'模块不起作用我在这里跟踪了它的文档https://pypi.python.org/pypi/django-crontab
答案 0 :(得分:5)
您的代码确实有效。您可能认为null->createAuthUrl()
应该出现在标准输出中?所以它不会那样工作,因为cron没有使用print("Hello")
和stdour
来输出它。要查看实际结果,您应该将路径指向stderr
列表中的某个日志文件:只需将CRONJOBS
作为最后一个参数,例如:
'>> /path/to/log/file.log'
将错误重定向到stdout也可能会有所帮助。为此,您需要将CRONJOBS = [
('*/1 * * * *', 'media_api_server.cron.cronSendEmail', '>> /path/to/log/file.log')
]
添加到CRONTAB_COMMAND_SUFFIX = '2>&1'
答案 1 :(得分:0)
尝试用第一行更改crontab,例如:
SHELL=/bin/bash
在crontab上使用以下命令创建新行:
./manage.py crontab add
并使用以下命令更改crontab库创建的行:
crontab -e
*/1 * * * * source /home/app/env/bin/activate && /home/app/manage.py crontab run 123HASHOFTASK123
答案 2 :(得分:0)
source
有时无法在Shell脚本中工作
使用。(点)代替
* / 1 * * * *。 / home / app / env / bin /激活e.t.c。
答案 3 :(得分:0)
另一种方法,直接在OS中(如果您在Unix系统上运行),因此您不必摆弄python库。如果您的OS用户具有django项目的所有权限/拥有,则可以在命令行以及项目文件夹所在的目录中执行该操作;
user@server:~$ crontab -l
0 6 * * * python PROJECT/manage.py shell -c "<--import statements; function calls;-->"
只是共享,因为最近我也遇到过类似的情况,但这证明是一种干净的解决方法