锁定老帖子 主题:rails3项目解析之4——异步和定时任务
精华帖 (6) :: 良好帖 (4) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-08-06
目前还是使用crontab + rake,稳定而又简单,耗内存和性能不在考虑之内,应用的规模未到这种层次。
|
|
返回顶楼 | |
发表时间:2011-08-09
我一般都直接用crontab
|
|
返回顶楼 | |
发表时间:2011-08-10
想问下楼主,我配置的resque worker,启动之后,为什么隔几个小时或者一天这个样子,进程就没了,一定要写监控脚本重启worker进程么,我在想,是不是它内部就是这样字的,在没有任务运行,闲置一段时间后,就会自动关闭的。
|
|
返回顶楼 | |
发表时间:2011-08-11
alissa 写道 想问下楼主,我配置的resque worker,启动之后,为什么隔几个小时或者一天这个样子,进程就没了,一定要写监控脚本重启worker进程么,我在想,是不是它内部就是这样字的,在没有任务运行,闲置一段时间后,就会自动关闭的。
上面我也说了: 引用 在实际使用中,发现rake resque:work和rake resque:scheduler两个命令驻留进程后,都会因为某些任务执行时一些莫名其妙的异常而全部退出。trace日志也明确地指出了这一点。因此需要在这两个rake命令之上,加入监控脚本,在rake退出之后重新启动之。
并不是因为闲置才退出的,而是因为exception异常才退出。如果你启动rake的时候加入--trace并且把log重定向到一个文件,就能发现这个问题。所以必须要写个监控脚本定时扫描重启。好在一般都是同时起多个worker,有一个退出了马上重启,对整体没有影响。 |
|
返回顶楼 | |
发表时间:2011-08-11
whenever不是很方便的嘛?
另外,请教为何delayed_job不合适? |
|
返回顶楼 | |
发表时间:2011-08-11
shanghaichris 写道 whenever不是很方便的嘛?
另外,请教为何delayed_job不合适? whenever本质上还是cron调用rake或runner,每次rake命令都要重新加载所有的rails环境,速度慢,还多了很多不必要的资源浪费。delayed_job是用数据库来存储任务的,不想再给数据库增加更多负担了。 whenever只有定时任务没有异步任务。 delayed_job只有异步任务没有定时任务。 |
|
返回顶楼 | |
发表时间:2011-08-14
最后修改:2011-08-14
根据我的经验,worker莫名退出有2种情况
1. 代码里面没有处理到的一些exception,可以在整个worker代码block中catch Exception,然后输出到错误日志,保证worker本身不会因为出错而中断。 2. 运行worker的shell session中断,ruby进程收到SIGHUP信号而退出,这个问题可以用nohup来运行worker解决。 |
|
返回顶楼 | |
发表时间:2011-08-15
我们现在系统中的定时任务都是通过配置文件来管理的,结合JAVA的定时器定时去扫描,但是系统跑起来,任务少的时候还可以,一旦设备上线多了,速度就降下来了,最要命的时候会出现并发,就是任务阻塞,也不提示任务超时什么的
|
|
返回顶楼 | |
发表时间:2012-04-19
ssjwanghui1988 写道 我们现在系统中的定时任务都是通过配置文件来管理的,结合JAVA的定时器定时去扫描,但是系统跑起来,任务少的时候还可以,一旦设备上线多了,速度就降下来了,最要命的时候会出现并发,就是任务阻塞,也不提示任务超时什么的
也许可以使用god或者monit之类的监视工具 |
|
返回顶楼 | |