Heroku定时任务每10分钟运行,每小时调度一次

1 投票
3 回答
2303 浏览
提问于 2025-04-17 14:14

我刚把我的推特机器人上传到Heroku,并设置每小时的半点运行一次,使用的是Heroku的调度插件。但是,不知道为什么它却每10分钟就跑一次。难道这是调度器的bug吗?下面是我日志中的一段,显示调度器成功运行后,十分钟后又尝试运行的记录:

2013-01-30T19:30:20+00:00 heroku[scheduler.4875]: Starting process with command `python ff7ebooks.py`
2013-01-30T19:30:21+00:00 heroku[scheduler.4875]: State changed from starting to up
2013-01-30T19:30:24+00:00 heroku[scheduler.4875]: Process exited with status 0
2013-01-30T19:30:24+00:00 heroku[scheduler.4875]: State changed from up to complete
2013-01-30T19:34:34+00:00 heroku[web.1]: State changed from crashed to starting
2013-01-30T19:34:42+00:00 heroku[web.1]: Starting process with command `python ff7ebooks.py`
2013-01-30T19:34:44+00:00 heroku[web.1]: Process exited with status 0
2013-01-30T19:34:44+00:00 heroku[web.1]: State changed from starting to crashed

如果有人需要任何信息来帮我诊断这个问题,我可以提供。我注意到[web.1]的日志信息每隔几分钟就会重复一次。我不想给我的粉丝们带来骚扰。

3 个回答

0

我通过最后一个简单的操作解决了这个问题:

  • 我把工人的数量设置为0
  • 然后在调度器里还是写了“python ELO_voetbal.py”,这样就会自动为这个启动一个工人。
  • 所以我既没有使用高级调度器,也没有把“tmp-process-type”放到什么地方。
0

我想和大家分享一个朋友的解决方案,他帮我处理了一个一次性运行的脚本(就像一个启动后会结束的Python脚本,而不是一直运行的那种)。

如果有任何问题,随时告诉我,我会帮你 --> andreabalbo.com

嗨,Andrea

我刚刚在我的Procfile里创建了一个随机的进程类型:

tmp-process-type: command:test

我没有在Heroku的控制面板上开启这个进程类型。在安装了高级调度器后,我创建了一个每分钟运行一次的触发器,命令是“tmp-process-type”。查看我的日志,我可以看到每分钟都有一个进程以“command:test”启动,这证明了Procfile里的进程类型是有效的。然后我在Heroku的控制面板上开启了这个进程类型。这在我的日志中立刻显示出来:

Scaled to tmp-process-type@1:Free web@0:Free by user ...

这是因为在开启后,Heroku会启动一个正常的dyno(就是运行环境),并试图保持它的运行。由于你的脚本是一个会结束的任务,dyno会停止运行,Heroku会自动重启它,这样你的任务就会被多次执行。

总的来说,以下步骤应该能解决你的问题: 1. 先把你的进程类型关闭(但要保留在Procfile里) 2. 安装高级调度器 3. 创建一个触发器(可以是定期的或一次性的),命令是“tmp-process-type” 4. 查看你的日志,看看有没有什么奇怪的情况出现

祝好,Oscar

7

如果还有其他人遇到这个问题,我找到了办法。我启用了调度器,然后分配了0个dyno,这样只有在计划运行的时候,Heroku才会分配一个dyno。出于某种原因,它一直在不停地运行我的程序,而我猜测Twitter每隔几分钟才允许它连接一次,这导致了我发推的时间不规律。

撰写回答