Rails 想要通过 rake task 确认 sidekiq 的状态失败

lukefan · 2015年10月03日 · 最后由 lukefan 回复于 2015年10月03日 · 1114 次阅读

想要写一个rake task,在里面确认sidekiq的状态,如果sidekiq死掉了,就重新启动。 结果发现,rake task和主进程是跑在不同的进程里面的,怎么跑,processes_size都是0。 后来在controller里面写了一个action,判断processes_size。 在console中curl去抓取,没有问题,processes_size在正常情况下是1。 但是在rake里面curl相同的网址,返回的就是0了。 只能写了一个shell文档,然后定时执行这个shell,不用rake task了。

共收到 2 条回复

用 rake task 去检查 sidekiq 的运行状态不是不可以,只是不应该通过 processes_size 去检查,而应该根据 sidekiq 的进程号去检查,判断进程状态,失败则重启。

sidekiq 会意外退出,如果不是系统资源不足或者第三方依赖问题(比如 redis 挂掉,或者通讯问题)等,相当于给了你一个信号,系统里存在坑,如果不及时排查解决,定时检查重启 sidekiq 其实是治标不治本。

关于正确的 sidekiq 进程监控和管理,正确的姿势其实是用系统自带的进程管理器,比如 Ubuntu 自带的 upstart 或者更超前的 systemd 来管理进程,具体细节,sidekiq 的作者在 Blog 有一篇文章专门解释过。

http://www.mikeperham.com/2015/07/16/sidekiq-and-upstart/

我是将系统通过docker部署在了digitalocean中的一台只有512M内存的机器上,于是就经常会退出。 原来不适用 -d参数,将sidekiq设置在一个独立的docker中时,没有这种问题。 但是用 -d 参数,将sidekiq和webserver跑在同一个docker中,就废掉了。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册