【发布时间】:2018-07-24 20:45:03
【问题描述】:
我需要编写一个任务,它只在每台服务器上执行一次行命令。 例如:
task :start_service do
on servers do
execute 'sudo svc -t /etc/my_service'
end
end
我在 3.10.1 版本 gem 中的文档 http://www.rubydoc.info/gems/capistrano/toplevel 中搜索了它。但是 servers 方法在 Capistrano 中是未定义的。
看看我编造的)):
task :docker_start do
servers = server('') # dirty hack to get all servers
on servers do |h|
next if h == ''
execute 'sudo svc -t /etc/my_service'
end
end
有没有办法在没有这种肮脏的黑客攻击的情况下做到这一点? 谢谢。
编辑:
我的my_stage.rb 是这样的:
server 'serv1', roles: %w(app role1 role2)
server 'serv2', roles: %w(app role2 db role3), primary: true
我想我可以为每个服务器添加一个特殊角色,例如:my_service:
server 'serv1', roles: %w(app role1 role2 my_service)
server 'serv2', roles: %w(app role2 db role3 my_service), primary: true
并将任务写为:
task :start_service do
on roles :my_service do
execute 'sudo svc -t /etc/my_service'
end
end
但我认为这不是只为列表服务器添加新角色的真正方法。
【问题讨论】:
标签: capistrano