我的流量较低的内部网页,我们用它来管理远程计算机。
此网页尝试注册CRON作业,以便在指定时间每周一次,将电子邮件发送到列表,其中包含数据库中数据的当前状态。
然而,在测试中,一切都很好。当推向生产时,我会测试cron工作,它会工作。但是当周末离开系统时(系统上可能没有人),作业就不会被执行。
我尝试过几种不同的方式进行初始化,以便它不会(不应该)与系统上的任何请求绑定,并且应该在初始化时注册,无论是否有人遇到系统。
from flask_apscheduler.scheduler import APScheduler
from nydps.web.mmserver import app as application
scheduler = APScheduler()
scheduler.init_app(application)
scheduler.start()
def weekly_report():
# doing things with a session
# send_smtp is a custom smtp function
send_smtp(smtp_content, destination, smtpSender, 'TMM Directory: Weekly Utilization Report')
app.config['JOBS'] = [{
'id': 'weekly_report',
'func': weekly_report,
'trigger': {
'type': 'cron',
'day_of_week': weekly_report_day_of_week,
'hour': weekly_report_hour,
'minute': weekly_report_minute
}
}]
如果我更改报告日,小时,分钟。重启服务器,它将执行。只有当我将日时分钟设置为稍微远一点的时间(我不在网站上时),它似乎没有被执行。
有什么想法?
编辑:在Windows上使用WAMP在Apache之后部署生产。
答案 0 :(得分:1)
如果您在Windows下,为什么不在任务计划程序上添加任务? 您可以运行Python脚本(使用BAT脚本)。
您可以在Linux或Windows上进行开发,但需要在Windows上准备发布版本:
首先,使用pip
,setuptools
和wheel
在Windows上安装Python。
为简单起见,请将C:\{PYTHON_INSTALL_DIR}\Scripts
添加到PATH
。
以管理员身份,在C:\Program Files\{YOUR_COMPANY}
中创建目标目录结构。
使用MS-DOS控制台,创建virtualenv并激活它:
C:
CD C:\Program Files\{YOUR_COMPANY}
virtualenv {YOUR_APP_NAME}
{YOUR_APP_NAME}\Scripts\activate
安装您的应用程序:
pip install {YOUR_APP_NAME} # if on PyPi
pip install {YOUR_WHEEL} # if on another source (ex.: a file)
现在,您可以压缩ZIP文件中的C:\Program Files\{YOUR_COMPANY}
文件夹并将其发布:例如:“{YOUR_APP_NAME} -py2-win64.zip”。
在Windows上,下载您的ZIP文件“{YOUR_APP_NAME} -py2-win64.zip”并解压缩。
以管理员身份,将未压缩的文件夹{YOUR_COMPANY}\{YOUR_APP_NAME}
复制到C:\Program Files\{YOUR_COMPANY}
。
如果您有安装脚本或更新配置文件,请运行安装脚本。
Python可执行文件路径为:
"C:\Program Files\{YOUR_COMPANY}\{YOUR_APP_NAME}\Scripts\python.exe"
如果您在setup.py
中声明一个,也可以考虑您的入口点。
答案 1 :(得分:0)
为什么要通过尝试启动这样的cron作业来解决问题?只需保存麻烦并使用python-crontab直接写入crontab:
from crontab import CronTab
cron = CronTab(user = True) #user='username' to specify a different account
job = cron.new(command='python /home/usr/script/script.py')
job.week.every(1)
job.enable()
if job.is_enabled():
print 'success!'