【问题标题】:Heroku Apscheduler: timed job OK but not for schedulee jobHeroku Apscheduler:定时作业可以,但不适用于调度作业
【发布时间】:2015-08-14 07:39:50
【问题描述】:

我正在关注 this 在 Heroku 上安排我的 Django cron 作业。

Procfile:

web: gunicorn tango.wsgi --log-file -
clock: python createStatistics.py

createStatistics.py:

from apscheduler.schedulers.blocking import BlockingScheduler

sched = BlockingScheduler()

@sched.scheduled_job('interval', minutes=1)
def timed_job():
    print('This job is run every minute.')

@sched.scheduled_job('cron', day=14, hour=15, minute=37)
def scheduled_job():
    print('This job is run on day 14 at minute 37, 3pm.')

sched.start()

timed_job 运行正常,但是,scheduled_job 无效。我是否需要为apscheduler 设置任何时区信息(我在settings.py 中设置了TIME_ZONE)?如果是这样,怎么做?还是我错过了什么?

【问题讨论】:

  • 这个设置没有问题。您是否尝试过启用调试日志记录(使用 level=DEBUG 设置日志记录系统)?这将告诉您计划何时运行下一个作业。如果您只安排 schedule_job,它会告诉您需要等待多长时间。您可以使用此信息检查日程安排是否正确。

标签: heroku apscheduler


【解决方案1】:

特定于 Heroku,由于我还无法弄清楚的原因,您似乎需要在 cron 作业上指定可选的 id 字段才能使其工作。所以 cron, job 定义现在看起来像这样。

@sched.scheduled_job('cron', id="job_1", day=14, hour=15, minute=37)
def scheduled_job():
    print('This job is run on day 14 at minute 37, 3pm.')

【讨论】:

    【解决方案2】:

    您必须在每个作业中指定时区,否则 Heroku 将在 UTC 时区运行。

    @sched.scheduled_job('cron', day=14, hour=15, minute=37, timezone=YOUR_TIME_ZONE)
    def scheduled_job():
        print('This job is run on day 14 at minute 37, 3pm.')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-17
      • 2020-03-17
      • 2016-09-21
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      相关资源
      最近更新 更多