как создать новую службу Windows с шеф-поваром?

Таким образом, у шеф-повара нет встроенной поддержки для создания новых сервисов. Я создаю новую службу Windows в одном из моих рецептов:

 powershell_script "Derp" do
  code <<-EOH
  new-service \
  -name derp "C:/path/myservice.exe" \
  -displayName "derp" \
  -StartupType Automatic \
  -Description "derp Service"
  EOH

Таким образом, это работает нормально при первом запуске, но затем генерирует ошибки для последующих запусков, потому что служба уже существует.

Является ли единственным решением здесь сделать мою собственную охрану? Мне нравится избегать использования моих собственных условных выражений в моих рецептах, где это возможно. Я не могу быть единственным с этой проблемой, но я не могу найти в Интернете много примеров того, как решить эту проблему шеф-поваром.


person red888    schedule 17.08.2016    source источник


Ответы (1)


Не знаю, почему вы думаете, что Chef не поддерживает создание сервисов, действие :enable ресурса service работает в Windows, как и везде.

person coderanger    schedule 17.08.2016
comment
Какая? Можете ли вы привести пример того, как я могу использовать :enable для создания новой службы Windows, которая запускает C:/path/myservice.exe. Я не думал, что это может сделать это. - person red888; 18.08.2016
comment
Не уверен, что вы имеете в виду, службы обычно регистрируются, а затем Chef устанавливает параметры запуска. Является ли myservice.exe обычным исполняемым файлом или реальной службой? Службы Windows не похожи на Linux, где вы можете использовать любую обычную программу. - person coderanger; 18.08.2016
comment
Вы можете видеть, что я делаю в этом сценарии, создавая новую службу Windows, которая указывает на исполняемый файл — НОВУЮ службу, которая может уже существовать, а может и не существовать. - person red888; 18.08.2016
comment
Но является ли exe реальной службой или нет? - person coderanger; 18.08.2016
comment
В основном у нас есть некоторые помощники, такие как Win32::Service.exists?(name), которые можно использовать для проверки идемпотентности, но это зависит от специфики. - person coderanger; 18.08.2016
comment
Но большинство служб Windows либо имеют /register, либо автоматически регистрируются при запуске в качестве неслужбы. - person coderanger; 18.08.2016
comment
не уверен, не думаю, что в этом exe есть переключатель /register, но даже в этом случае я все равно не смогу использовать провайдера service с таким правом? Прямо сейчас я использую защиту с Win32::Service.exists?, но мне интересно, может ли поставщик service сделать это для меня. - person red888; 18.08.2016
comment
Похоже, это, вероятно, не настоящий исполняемый файл службы. - person coderanger; 18.08.2016