我正在关注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)?如果是这样,怎么样?或者我错过了什么?
答案 0 :(得分:0)
特定于 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.')
答案 1 :(得分:0)
您必须在每个作业中指定时区,否则 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.')