python - Flask APScheduler - Cron Job 只发生在页面上的活跃用户身上

标签 python flask apscheduler

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

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

然而,在测试中,一切似乎都很好。在投入生产时,我会测试 cron 作业,它会工作。但是当让系统在周末运行时(系统上可能没有人),作业不会执行。

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

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
    }
}]

如果我去更改报告日、小时、分钟。重启服务器,就会执行。只有当我将日时分设置为稍远一点的 future 时间(我不在该网站上)时,它似乎没有被执行。

有什么想法吗?

编辑:生产部署在 Apache 后面,在 Windows 上使用 WAMP。

最佳答案

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

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

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

创建独立的 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)

现在,您可以将 C:\Program Files\{YOUR_COMPANY} 文件夹压缩成 ZIP 文件并发布它:例如:“{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 中声明一个,您也可以考虑您的入口点。

关于python - Flask APScheduler - Cron Job 只发生在页面上的活跃用户身上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38253672/

相关文章:

python - 如何从链接列表中删除节点?

python - ChoiceField : Select a valid choice. 这不是可用选项之一

python - 升级后无法连接到 MongoDB?

python - header 中返回的内容长度,用于使用 nginx、uwsgi 和 Flask 进行分块传输编码

python - 使用 Flask-python/jinja 等待 X 秒后页面重定向

Python Apscheduler 没有关闭

python - 添加两个 Pandas 数据框

python - 在 python 中添加新的 XML 节点并漂亮地打印 XML

cron - 如何在 APScheduler 中获取之前的运行时间?

python - 值错误: The following arguments have not been supplied: email