Heroku定时任务每10分钟运行,每小时调度一次
我刚把我的推特机器人上传到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
- 然后在调度器里还是写了“python ELO_voetbal.py”,这样就会自动为这个启动一个工人。
- 所以我既没有使用高级调度器,也没有把“tmp-process-type”放到什么地方。
我想和大家分享一个朋友的解决方案,他帮我处理了一个一次性运行的脚本(就像一个启动后会结束的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
如果还有其他人遇到这个问题,我找到了办法。我启用了调度器,然后分配了0个dyno,这样只有在计划运行的时候,Heroku才会分配一个dyno。出于某种原因,它一直在不停地运行我的程序,而我猜测Twitter每隔几分钟才允许它连接一次,这导致了我发推的时间不规律。