Flask APScheduler - Cron Job仅适用于页面上的活动用户

时间:2016-07-07 19:20:28

标签: python flask apscheduler

我的流量较低的内部网页,我们用它来管理远程计算机。

此网页尝试注册CRON作业,以便在指定时间每周一次,将电子邮件发送到列表,其中包含数据库中数据的当前状态。

然而,在测试中,一切都很好。当推向生产时,我会测试cron工作,它会工作。但是当周末离开系统时(系统上可能没有人),作业就不会被执行。

我尝试过几种不同的方式进行初始化,以便它不会(不应该)与系统上的任何请求绑定,并且应该在初始化时注册,无论是否有人遇到系统。

mmsver.wsgi

from flask_apscheduler.scheduler import APScheduler
from nydps.web.mmserver import app as application

scheduler = APScheduler()
scheduler.init_app(application)
scheduler.start()

mmserver.py(摘录)

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之后部署生产。

2 个答案:

答案 0 :(得分:1)

恕我直言,使用Apache + Webapp运行计划任务不是一个好主意。

如果您在Windows下,为什么不在任务计划程序上添加任务? 您可以运行Python脚本(使用BAT脚本)。

  1. 创建一个独立的Python应用程序,
  2. 在Windows上部署应用程序,
  3. 在任务计划程序中创建新任务。
  4. 创建独立的Python应用程序

    您可以在Linux或Windows上进行开发,但需要在Windows上准备发布版本:

    首先,使用pipsetuptoolswheel在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上部署应用程序

    在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!'