当前位置:  开发笔记 > 运维 > 正文

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

如何解决《Capistrano可以连续执行主机上的任务吗?》经验,为你挑选了2个好方法。

我正在使用Capistrano来管理在多个负载平衡服务器上运行的Java Web应用程序.某些任务(例如配置更改)需要重新启动服务器或应用程序重新部署,在此期间服务器将无响应.

如果Capistrano可以连续地在服务器上执行这些任务,而不是同时执行,那么服务器场中只有一台机器一次会停机,负载均衡器将确保没有请求丢失.但是,据我所知,Capistrano只能同时在服务器上执行操作.

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

在我的配置中,我可以想到一些黑客入侵的方法,但似乎应该有一个我可以在某处设置的标志.

有人知道怎么做吗?



1> silvamerica..:

我使用它来串行重启我的服务器,而不是并行:

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


惊人!顺便说一下,也许上限应该按顺序添加一个策略来执行任务.

2> conny..:

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

:max_hosts - 指定一次应选择的最大主机数.如果此值小于选择运行的主机数,则主机将以max_hosts组的形式运行.默认值为nil,表示没有最大主机限制.请注意,这并不限制可以打开的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

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有