2016-03-02 190 views
2

我正面临aws autoscaling + sidekiq繁忙作业的问题。我有4个实例在自动比例组中运行,并且多个Sidekiq进程在这些实例上运行。所有使用相同的实例redis在终止自动缩放EC2实例时优雅地停止Sidekiq

如果我的一个实例正在终止,那么忙碌队列中的作业将被推入失败状态。它应该使这个工作顺利。

我在/etc/rc0.d文件夹中添加了一个脚本,它会在instace终止时杀掉sidekiq进程,但我的作业仍然处于故障状态。 我尝试用TERM和USR1信号进行sidkeiq进程终止,但此信号也发生同样的情况。

我已经使用sidkeiq pro也启用了可靠的获取。

有没有人知道,如何在繁忙队列中实现工作应该进入排队状态,而不是在faliure状态,而killig sidekiq手动或优雅地处理?

回答

1

我自己遇到了同样的问题,不得不通过将其完全安装到守护进程管理中来修复它,在我的案例chkconfig中。我不确定你的EC2设置是什么样的,但我发现只有chkconfig知道的脚本正在执行。

如果您还没有,您可能还需要为脚本添加睡眠以确保Sidekiq有足够的时间完全退出。

+0

请发布示例脚本,以及如何使用chkconfig来探查守护进程管理。我使用弹性beanstalk和sidekiq,但不用担心,你的脚本和守护进程只会作为我的指导。谢谢 – brg

+0

我不允许共享代码,但我写的基本结构是服务在Sidekiq启动时启动,然后在检测到主机系统关闭,重新启动等时执行Sidekiq的正常关闭。 –

+0

如果您的系统使用chkconfig或类似的东西,你会想在/etc/init.d/中创建脚本。你可以阅读如何在这里写脚本:[链接](http://shahmirj.com/blog/beginners-guide-to-creating-a-daemon-in-linux) –