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

2024-10-04 01:29:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要运行这个文件:

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.模型. 在

重要的事实是,我不能在服务器上安装virtualenv,因为我没有权限。另外,我在这方面还是个新手,所以我在服务器和python上没有太多的技能。在

谢谢。在


Tags: appsdjangotextfromimportbasetodaydatetime
2条回答

我认为这是您的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/

所以你的解决方案要么是:

^{pr2}$

或者

^{3}$

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

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

相关问题 更多 >