У меня есть приложение Java, которое я развертываю с помощью Chef. Я бы хотел, чтобы он запустился и позволил клиенту Chef выйти. Однако похоже, что шеф-клиент ждет завершения команды, как бы я ее ни запустил.
Я пытался:
javaw
с execute
ресурсstart
start /B
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 легко настроить, поскольку он включает сценарии, помогающие генерировать конфигурацию, устанавливать как службу и запускать службу. В рецепт шеф-повара я включаю файл конфигурации, сгенерированный на тестовой машине, и устанавливаю и запускаю службу с помощью скриптов сборки.
Одна из проблем заключалась в том, чтобы убедиться, что пользователь, запускающий службу, может запускать службы.