шеф-повар разворачивает службу запуска и последовательно перезапускает службу

Я читал https://serverfault.com/questions/378520/chef-stop-and-start-service-in-sequence и хотел бы задать другую процедуру.

Шаг 1: загрузка фреймворка в сервис jboss

bash "bootstrap application" do
    code <<-EOF
    ant bootstrap
    EOF
end

Шаг 2: затем запустите jboss

service "jboss" do
    action :start
end

Шаг 3: установите приложение

bash "install application" do
    code <<-EOF
    ant install
    EOF
end

между шагами 2 и 3 ant install возвращает ошибку, потому что jboss еще не запущен. Но успешно во 2-м заходе. Очевидно, что шаг 3 не знает, запущен ли уже jboss.

Как это сделать на поваре?


person Ryan    schedule 18.10.2013    source источник
comment
Не могли бы вы куда-нибудь вставить вывод? Служба должна быть запущена после шага 2   -  person StephenKing    schedule 18.10.2013
comment
Возможно, у JBoss не было времени подойти, когда выполняется шаг 3. В этом случае сервис будет технически запущен, но JBoss еще не будет принимать запросы. Вам придется придумать способ мониторинга служебного порта JBoss или его журнала, чтобы убедиться, что шаг 3 выполняется только после того, как JBoss фактически запущен.   -  person cassianoleal    schedule 19.10.2013
comment
Если это проблема времени, то простое решение — добавить оператор ожидания к цели установки: ant.apache.org/manual/Tasks/waitfor.html   -  person Mark O'Connor    schedule 19.10.2013
comment
Я дал ответ здесь. одна ключевая проблема здесь заключается в том, что вы не можете знать, успешно ли запущен jboss, даже если служба jboss запущена. это требует времени. Поэтому вам лучше улучшить цель муравья, чтобы повторить попытку, или использовать атрибут retries в ресурсе bash[install application].   -  person shawnzhu    schedule 20.10.2013
comment
@MarkO'Connor, build.xml создается динамически из внешнего пакета, я не могу этого сделать. хотя это более прямолинейно.   -  person Ryan    schedule 21.10.2013
comment
@shawnzhu да .. проверь это.   -  person Ryan    schedule 21.10.2013
comment
@cbl точно. вот что я спрашиваю. в настоящее время делает и тестирует ruby_block от шеф-повара. я буду держать это в курсе.   -  person Ryan    schedule 21.10.2013
comment
@StephenKing 1-й вывод будет «Отказано в подключении» при установке ant на jboss. но через некоторое время (вероятно, jboss уже запущен в фоновом режиме) и попробуйте снова установить ant, он проходит.   -  person Ryan    schedule 21.10.2013


Ответы (1)


хорошо, я сделал это из ruby_block

# for managing service
# jboss block until operational
ruby_block "block_until_operational" do
  block do
    until IO.popen("netstat -lnt").entries.select { |entry|
        entry.split[3] =~ /:#{node[:jboss][:default_port]}$/
      }.size == 1   
      Chef::Log.debug "service[jboss] not listening on port #{node[:jboss][:default_port]}"
      sleep 1
    end
  end
  action :nothing
end

я создал этот рубиновый блок, который будет слушать порт 8080, пока он не вернет 1 (начало), и вызвал его через

service "jboss" do
    action :start
    notifies :create, 'ruby_block[block_until_operational]', :immediate
end
person Ryan    schedule 23.10.2013