繁体   English   中英

如何在cron作业中运行python文件

[英]How to run python file in cron job

我需要运行此文件:

from apps.base.models import Event
from apps.base.models import ProfileActiveUntil
from django.template import Context
from django.db.models import Q
import datetime
from django.core.mail import EmailMultiAlternatives
from bonzer.settings import SITE_HOST
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from bonzer.settings import send_mail, BONZER_MAIL, BONZER_MAIL_SMTP, BONZER_MAIL_USER,         BONZER_MAIL_PASS, BONZER_MAIL_USETLS


today = datetime.date.today()
monthAgo = today + datetime.timedelta(days=1)
monthAgoMinusOneDay = today + datetime.timedelta(days=2)
events = Event.objects.all()
ProfileActiveUntils = ProfileActiveUntil.objects.filter(Q(active_until__range=(monthAgo, monthAgoMinusOneDay)))
msg = MIMEMultipart('alternative')
msg['Subject'] = "Novim dogodivscinam naproti"
msg['From'] = BONZER_MAIL
msg['To'] = 'jjag3r@gmail.com'

text = u'bla'
html = u'bla'
send_mail(msg_to=msg['To'], msg_subject=msg['Subject'], msg_html=html, msg_text=text)

我这样执行它: */2 * * * * /usr/local/bin/python2.7 /home/nezap/webapps/bonzer/bonzer/apps/base/alert.py

但是我收到错误消息:没有名为apps.base.models的模块。

重要的事实是,由于我没有权限,因此无法在服务器上安装virtualenv。 另外,我在这方面还是新手,因此我在服务器或python上没有太多技能。

谢谢。

cron不读取rc shell文件,因此您需要定义环境变量PYTHONPATH来包含apps包的位置以及脚本所需的所有其他模块文件。

PYTHONPATH=/usr/local/lib/python2.7:/usr/lib/python2.7
*/2 * * * * /usr/local/bin/python2.7 /home/nezap/webapps/bonzer/bonzer/apps/base/alert.pyr

我认为这是您的cwd(当前工作目录)存在的问题。 一种简单的测试方法是进入根目录(cd /)然后运行:

python2.7 /home/nezap/webapps/bonzer/bonzer/apps/base/alert.py

您应该得到同样的错误。 您将要使用的路径取决于您通常从何处运行脚本。 我猜可能是:

/ home / nezap / webapps / bonzer / bonzer / apps / base

要么

/ home / nezap / webapps / bonzer / bonzer /

因此,您的解决方案将是:

*/2 * * * * cd /home/nezap/webapps/bonzer/bonzer/apps/base && /usr/local/bin/python2.7 ./alert.py

要么

*/2 * * * * cd /home/nezap/webapps/bonzer/bonzer && /usr/local/bin/python2.7 ./apps/base/alert.py

基本上,您是在告诉cron将目录更改为该路径,然后如果可行(&&),请运行以下命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM