【发布时间】:2014-10-21 21:39:38
【问题描述】:
我的应用程序使用 Sidekiq 来处理长时间(几分钟)运行的后台任务。使用 Capistrano 2 完成部署,并使用 Monit 监控所有流程。
我在部署期间使用 capistrano-sidekiq 来管理 sidekiq 进程,但效果并不理想。在部署过程中,有时会启动一个新的 sidekiq 进程,但不会杀死旧的 sidekiq 进程。我相信这是因为 capistrano-sidekiq 在部署期间没有通过 Monit 运行。
第二个问题是,因为我的后台任务可能需要几分钟才能完成我的部署,所以应该允许两个 sidekiq 进程共存。应该允许旧的 sidekiq 进程完成它正在处理的任务,而新的 sidekiq 进程应该开始处理新的任务。
我一直在考虑在我的部署脚本中添加这样的内容
部署开始时:
- 我告诉 Monit 取消监控 sidekiq 进程
- 我停止当前的 sidekiq 进程并给它 10 分钟的时间来完成它的任务
代码更新后:
- 我启动了一个新的 sidekiq 进程并告诉 Monit 开始监控它。
如果在停止的 sidekiq 进程最终被杀死之前没有删除 pid 文件,我可能需要将 sidekiq 进程 pid 文件移动到发布目录。
这听起来怎么样?发现任何警告?
编辑:
找到一个关于同样问题的好帖子。
【问题讨论】:
标签: capistrano sidekiq monit