Heroku Clock进程配置:如何让Python定时任务在14:30执行?
解决Heroku Clock进程定时任务14:30执行的问题
你当前的代码存在两个关键问题,导致修改后任务仍未在14:30执行:
1. Cron参数名错误
APScheduler的cron触发器中,分钟参数是单数的minute,而非你写的复数minutes。参数名写错后,调度器会忽略该配置,仍按默认的0分执行任务。
2. import执行脚本的逻辑问题
import AME_Heroku_v001.py的写法本身不规范(导入模块时不需要加.py后缀),且Python的import机制是:模块第一次导入时会执行顶层代码,但后续重复导入不会再执行。这意味着你的定时任务只有第一次触发时会运行脚本,后续调度都不会生效。
正确代码示例
方案一:用subprocess直接执行脚本(适合不修改原脚本的场景)
from apscheduler.schedulers.blocking import BlockingScheduler import subprocess import sys sched = BlockingScheduler() @sched.scheduled_job('cron', day_of_week='mon-fri', hour=14, minute=30) def scheduled_job(): # 每次触发都重新执行脚本,避免import的缓存问题 subprocess.run([sys.executable, 'AME_Heroku_v001.py']) sched.start()
方案二:重构脚本为函数调用(更推荐,代码更易维护)
先修改AME_Heroku_v001.py,把核心逻辑封装成函数:
# AME_Heroku_v001.py def main(): # 将原脚本的所有业务逻辑放到这个函数里 print("执行定时任务核心逻辑") if __name__ == "__main__": main()
再修改clock.py调用该函数:
from apscheduler.schedulers.blocking import BlockingScheduler from AME_Heroku_v001 import main sched = BlockingScheduler() @sched.scheduled_job('cron', day_of_week='mon-fri', hour=14, minute=30) def scheduled_job(): main() sched.start()
部署注意事项
修改代码后,需要推送到Heroku并重启Clock进程,确保新配置生效:
git add . git commit -m "fix: adjust cron time to 14:30 and fix task execution logic" git push heroku main # 重启clock dyno heroku ps:restart clock
内容的提问来源于stack exchange,提问作者Edward Jones
相关产品推荐
相关产品推荐

