我需要使用django_cron的帮助
我目前正在与HDFS、ApacheLivy和Django合作,其目标是发送一个请求,以运行一些存储在HDFS中的代码,并调用Livy来创建批处理。现在,一切正常,我有一个基本的字数存储在HDFS中,有一个.txt文件,在htlm页面上,我只需点击一个简单的按钮就可以启动整个过程 我成功地创建了wordcount结果,我的下一步是从Livy那里获取信息,例如当前启动/运行/停止/成功的会话(或批处理)的ID某种回调,但我需要它来自我实现,这样我就可以知道每个会话的状态。为此,我认为可以使用Django cron,因此无法正确设置它。我没有错误,但没有更多的事情发生。我错过了什么 目前正在Centos7上工作,但我在Python3.6中使用Conda环境,Django是最新版本,livy和HDFS(最新版本)也是如此 以下是我当前的文件: livy.html我需要使用django_cron的帮助,django,hdfs,livy,django-cron,Django,Hdfs,Livy,Django Cron,我目前正在与HDFS、ApacheLivy和Django合作,其目标是发送一个请求,以运行一些存储在HDFS中的代码,并调用Livy来创建批处理。现在,一切正常,我有一个基本的字数存储在HDFS中,有一个.txt文件,在htlm页面上,我只需点击一个简单的按钮就可以启动整个过程 我成功地创建了wordcount结果,我的下一步是从Livy那里获取信息,例如当前启动/运行/停止/成功的会话(或批处理)的ID某种回调,但我需要它来自我实现,这样我就可以知道每个会话的状态。为此,我认为可以使用Djan
{%load static%}
{{result.sessions}
views.py
从django.exe导入渲染
从django.http导入HttpResponse
从django_cron导入CronJobBase,计划
导入字数,livy
#在这里创建您的视图。
类CheckIdCronJob(CronJobBase):
每分钟运行一次=每分钟运行一次
计划=计划(每分钟运行=每分钟运行)
代码='button.CheckIdCronJob'#一个唯一的代码
def索引(请求):
if(request.GET.GET('mybtn')):
r=livy.send(request.GET.GET('mytextbox'))#(/test/LICENSE.txt)
返回呈现(请求,'button/livy.html',{'result':r})
返回渲染(请求,'button/livy.html')
利维
import json, pprint, requests, textwrap
def send(inputText):
host = 'http://localhost:8998'
data = {"file":"/myapp/wordcount.py", "args":[inputText,"2"]}
headers = {'Content-Type': 'application/json'}
r = requests.post(host + '/batches', data=json.dumps(data), headers=headers)
r = requests.get(host + '/batches' + '', data=json.dumps(data), headers=headers)
return r.json()
django crontab所做的只是使编写运行作业的管理命令变得容易,并指定这些作业应该运行的频率/时间。最后,您将得到一个管理命令
/manage.py runcron
,该命令将检查所有作业,并在需要时运行它们
它没有做到的是持续运行runcron
,如果您想确保作业在正确的时间运行,那么这就是您实际需要的。基本上,您希望runcron
每分钟运行一次(或者如果时间不是那么关键,那么每10分钟运行一次),因此您仍然需要使用一些系统守护进程来实现这一点
crontab
在CentOS上可用,可用于此目的。django crontab的安装向您展示了如何创建一个crontab,该crontab将每5分钟运行一次runcron
:
crontab -e
*/5 * * * * source /home/ubuntu/.bashrc && source /home/ubuntu/work/your-project/bin/activate && python /home/ubuntu/work/your-project/src/manage.py runcrons > /home/ubuntu/cronjob.log
您必须调整它以适应您的用例:
- 如果只执行
操作,作业将以您当前登录的用户身份运行。该用户可能不是运行crontab-e…
命令的正确用户,因为该用户需要具有运行项目的正确权限。使用manage.py
为其他用户创建crontab 在生产环境中运行时,这实际上是一件复杂的事情:获得正确的用户权限并获得运行各种任务的正确用户。通常,您会有一个-u user
或www-data
用户运行您的服务器(因此也是django应用程序),您希望该用户运行apache
命令。它不应该manage.py
运行apache,因为这会带来安全风险(您的web服务器将拥有对整个系统的完全访问权)root
- 上面的命令源于.bashrc,以确保环境变量设置正确/home/ubuntu/只是用户
的用户主目录。适当地改变这一点ubuntu
- 上面的命令还将激活virtualenv,以便manage.py命令可以与所有正确的依赖项一起运行。根据您的虚拟环境调整路径
- 最后,您需要通过设置Django_settings_MODULE环境变量(您可以在.bashrc中执行此操作,因此可以使用
源代码
或将
选项传递到--settings path.to.settings
来确保正确的Django设置被激活manage.py
- 最后一部分是将任务的输出定向到日志文件,以便在出现问题时进行故障排除。请在末尾添加
,以便cron错误(stderr)也被定向到同一日志2>&1
要检查crontab,请对当前登录的用户运行
crontab-l
,或对其他用户运行crontab-l-u用户
。django crontab所做的只是简化编写运行作业的管理命令,并指定这些作业的运行频率/时间。最后,您将得到一个管理命令/manage.py runcron
,该命令将检查所有作业,并在需要时运行它们
它没有做到的是持续运行runcron
,如果您想确保作业在正确的时间运行,那么这就是您实际需要的。基本上,您希望runcron
每分钟运行一次(或者如果时间不是那么关键,那么每10分钟运行一次),因此您仍然需要使用一些系统守护进程来实现这一点
crontab
在CentOS上可用,可用于此目的。django crontab的安装向您展示了如何创建一个crontab,该crontab将每5分钟运行一次runcron
:
crontab -e
*/5 * * * * source /home/ubuntu/.bashrc && source /home/ubuntu/work/your-project/bin/activate && python /home/ubuntu/work/your-project/src/manage.py runcrons > /home/ubuntu/cronjob.log
您必须调整它以适应您的用例:
- 如果只执行
操作,作业将以您当前登录的用户身份运行。该用户可能不是运行crontab-e…
命令的正确用户,因为该用户需要具有运行项目的正确权限。使用manage.py
为其他用户创建crontab 在生产环境中运行时,这实际上是一件复杂的事情:获得正确的用户权限并获得正确的用户来运行-u user