我有一个低流量的内部网页,我们用它来管理远程计算机。
该网页尝试注册一个 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 脚本)。
- 创建一个独立的 Python 应用程序,
- 在 Windows 上部署应用程序,
- 在任务计划程序中创建一个新任务。
创建独立的 Python 应用程序
您可以在 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)
现在,您可以将 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}
。
运行安装脚本(如果有)或更新配置文件。
在任务计划程序中创建一个新任务
- Microsoft TechNet 上的详细文章:Schedule a Task ,
- 这个问题:Schedule Python Script - Windows 7 ,
- 此博客:Scheduling a Python script ,
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/