Назад | Перейти на главную страницу

Как выполнить команду в фоновом режиме с рецептом Chef в Windows?

У меня есть приложение Java, которое я развертываю с помощью Chef. Я бы хотел, чтобы он запустился и позволил клиенту Chef выйти. Однако похоже, что шеф-клиент ждет завершения команды, как бы я ее ни запустил.

Я пытался:

  1. Выполнение javaw с execute ресурс
  2. Выполнение с start
  3. Выполнение с start /B
  4. Создание пакетного скрипта и его запуск с start и start /B

Есть ли способ запустить Java-программу без блокировки chef-client?

Редактировать: ответ ниже работает в Linux, а не в Windows. Вероятно, это не то, что вам нужно, но поскольку я уже написал это, не заметив, что это вопрос Windows, я оставлю его для потенциальных будущих читателей.

Вот как это можно сделать в Linux:

Я думаю, вы могли бы написать сценарий bash и запустить его как службу. Я использую daemon пакет для этого. Вот пример рецепта, с которого вы можете начать:

# the package that lets you easily define new services
package "daemon"

# script file used by service to launch your java program
file "/my/path/run_script.cmd" do
    content "java --flag1 --flag2 -jar /my/program.jar\n"
end

# setup the service (based on the script above),
# start it, and make it start at boot
cookbook_file '/etc/init.d/myservice' do
    source 'etc_initd_myservice'
end
service "myservice" do
    supports :restart => true, :start => true, :stop => true, :reload => true
    action [:enable]
end

Обратите внимание, что вам нужно добавить файл с именем etc_initd_myservice в свою кулинарную книгу. Вы можете использовать контент в этот ответ в качестве основы для этого файла. Это файл, который использует пакет «демон» для запуска сценария как службы.

Также, следующий вопрос может содержать соответствующую информацию, если у вас возникли проблемы с определением службы и созданием ее сценария init.d в том же рецепте.

В итоге я решил эту проблему, сделав программу службой и запустив ее таким образом. Служба Windows требует либо изменения кода, либо оболочки службы. YAJSW работал у меня. YAJSW легко настроить, поскольку он включает сценарии, помогающие генерировать конфигурацию, устанавливать как службу и запускать службу. В рецепт шеф-повара я включаю файл конфигурации, сгенерированный на тестовой машине, и устанавливаю и запускаю службу с помощью скриптов сборки.

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