我的应用程序使用Sidekiq来处理长时间(数分钟)的后台运行任务。 部署是通过Capistrano 2完成的,所有过程都通过Monit进行监控。
我在部署过程中使用capistrano-sidekiq来管理sidekiq进程,但效果并不理想。 在部署期间,有时会启动新的sidekiq进程,但旧进程不会被杀死。 我相信发生这种情况是因为capistrano-sidekiq在部署期间未通过Monit运行。
第二个问题是,由于我的后台任务可能需要几分钟才能完成我的部署,因此应该允许两个sidekiq进程共存。 应允许旧的sidekiq进程完成其正在处理的任务,而新的sidekiq进程应开始将新任务纳入处理过程。
我一直在我的部署脚本中考虑类似这样的事情
部署开始时:
代码更新后:
如果直到停止的sidekiq进程最终被杀死之前,都没有删除pid文件,我可能需要将sidekiq进程pid文件移到发行目录中。
听起来如何? 有任何注意事项吗?
编辑:
找到了一个很好的话题。
对我来说似乎合理。 唯一可能的问题是失去对旧的Sidekiq的PID的跟踪,但是您应该能够使用ps和grep来“停止”查找旧的Sidekiq。