Can Capistrano可以连续执行主机上的任务吗?

问题描述:

我正在使用Capistrano来管理在多个负载平衡服务器上运行的Java Web应用程序。某些任务(如配置更改)需要重新启动服务器或重新部署应用程序,在此期间服务器变得无法响应。Can Capistrano可以连续执行主机上的任务吗?

如果Capistrano的可以执行服务器上的这些任务连续,同时对比,场中只有一台机器会在同一时间下降后,负载平衡器将确保没有任何请求都将丢失。然而,据我所知,Capistrano只能同时在服务器上执行操作。

要清楚,我不是要连续执行不同的任务。我试图在不同的服务器上连续执行相同的任务。

我能想到的在我的配置黑客这个的一些方法,但似乎应该有一个标志,我可以设置的地方。

任何人都知道如何做到这一点?

我使用它来重新启动我的系列服务器,而不是并行:

task :my_task, :roles => :web do 
    find_servers_for_task(current_task).each do |server| 
    run "[task command here]", :hosts => server.host 
    end 
end 
+0

这工作完美。谢谢。 – devinfoley 2011-03-18 16:21:55

+0

非常感谢!它工作完美。 – raskhadafi 2012-09-24 14:56:28

+2

太棒了!顺便说一句,也许帽应该添加一个策略执行任务的顺序。 – DiveInto 2013-10-18 08:02:50

嗨它不Capistrano的缝可能很容易,当然可以采取一些方法。

1),你可以指定不同的角色每个服务器,并添加负责角色的旋转和调用,它实际需要的任务的任务一个单独的任务。

2)你可以写单独的脚本做旋转同上,但使用不同的主机名,而不是角色

3),还可以过滤主机名/使用环境变量Capistrano的服务器,也许你可以在使用它旋转算法。

不幸的是,对于我来说,capistrano没有很好的文档可以阅读capistrano资源,效果很好,但也需要花费很多时间。

+0

感谢您的信息描述,您可以使用in: :sequence。不是我所希望的答案,但真相很痛苦。我可能会尝试分叉并添加此功能。 – devinfoley 2010-11-08 23:40:10

您可以设置:max_hosts为任务,以限制其并行:

:max_hosts - 指定的最大数量应该一次选择的主机。如果此值小于选择运行的主机数,则主机将以max_hosts组运行。缺省值为零,表示没有最大主机限制。请注意,这不会限制可以打开的SSH通道的数量,只会限制将被调用的主机的数量。

实施例:

desc "Say hello, one at a time" 
task :hello, :roles => :app, :max_hosts => 1 do 
    run "echo serial hello ; sleep 0 ; echo serial hello DONE" 
    # Note that task parameters do NOT get automatically passed on to 
    # other tasks, i.e. a call to "deploy:restart" would be 
    # unaffected by :max_hosts set here. Example: 
    self.send(:normal_hello) 
end 

desc "Say hello, everybody" 
task :normal_hello, :roles => :app do 
    run "echo 'normal (parallel) hello' ; sleep 10 ; echo normal hello DONE" 
end 

Capistrano的3使用SSHKit其提供用于顺序发送命令的到多个服务器。有一个在SSHKit一个例子给我读:

https://github.com/capistrano/sshkit

注意,Capistrano的3是Capistrano的2.x版本有相当的改观

谁的人在这个页面时下结束:截至http://capistranorb.com/2013/06/01/release-announcement.html