Командные блоки Windows Chef Run

У меня есть рецепт шеф-повара со следующим кодом (также закомментирован альтернативный код, который я пробовал)

#execute
# execute 'service-api install' do
#   #command "web-#{node['default']['env']}.cmd" #start /HIGH /b -RedirectStandardOutput chef-serviceoutput.txt
#   command ('powershell -c "start-process web-%s.cmd -RedirectStandardOutput C:\\buildinfo\\service-api\\api\\approot\\chef-serviceoutput.txt"' % node['default']['env'])
#   cwd "C:\\buildinfo\\service-api\\api\\approot"
#   #not_if :timeout => 10, :cwd => 'C:\\buildinfo\\service-api\\api\\approot'
#   end

powershell_script 'service-api install' do
  code <<-EOH
  start-process web-#{node['default']['env']}.cmd -RedirectStandardOutput chef-serviceoutput.txt
  EOH
  cwd "C:\\buildinfo\\service-api\\api\\approot"
end

Код существенно меняет рабочий каталог и запускает файл .cmd, который запускает сервер. Теперь с помощью start-process он должен открыть новый cmd, а затем запустить там сервер, но в исходном cmd он выходит на новую строку.

Когда я запускаю это через шеф-повара, он (я думаю) также отслеживает все дочерние cmd из процесса и просто зависает после запуска этого раздела, ожидая, пока сервер будет убит.

Есть ли способ обойти это в шеф-поваре/окнах??


person Scooby    schedule 29.03.2016    source источник


Ответы (1)


Вероятно, вам следует установить настоящую службу, а не пытаться разветвлять фоновые задания изнутри Chef. Ознакомьтесь с windows_service ресурсом.

person coderanger    schedule 29.03.2016
comment
Затем вам понадобится что-то еще, чтобы создать отдельный контекст выполнения. Вероятно, в PowerShell есть что-то для этого, но общий шаблон — использовать запланированную задачу, установленную для выполнения через 0 секунд. - person coderanger; 30.03.2016