Como você executa um comando em segundo plano com uma receita do Chef no Windows?

1

Eu tenho um aplicativo Java que estou implantando com o Chef. Eu gostaria que ele começasse e permitisse que o cliente Chef saísse. No entanto, parece que o chef-cliente aguarda que o comando termine, não importa como eu o execute.

Eu tentei:

  1. Execução de javaw com o recurso execute
  2. Executando com start
  3. Executando com start /B
  4. Criando um script em lote e executando isso com start e start /B

Existe uma maneira de executar o programa Java sem bloquear o chef-client?

    
por kjw0188 13.02.2013 / 08:57

2 respostas

0

Acabei resolvendo isso tornando o programa um serviço e executando-o dessa maneira. Um serviço do Windows requer uma alteração de código ou um wrapper de serviço. YAJSW funcionou para mim. O YAJSW é fácil de configurar, pois inclui scripts para ajudar a gerar a configuração, instalar como um serviço e executar o serviço. Na receita do chef, incluo o arquivo de configuração gerado em uma máquina de teste e instalo e executo o serviço com a compilação em scripts.

Uma pegadinha foi garantir que o usuário que está executando o serviço possa executar serviços.

    
por 18.02.2013 / 21:03
1

Editar: a resposta abaixo funciona no Linux, não no Windows. Provavelmente não é o que você precisa, mas desde que eu o escrevi sem perceber que é uma questão do Windows, deixarei para os futuros leitores em potencial.

É assim que isso pode ser feito no Linux:

Eu acho que você poderia escrever um script bash e executá-lo como um serviço. Estou usando o pacote daemon para fazer isso. Aqui está um exemplo de receita com o qual você pode começar:

# 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

Note que você precisará adicionar um arquivo chamado etc_initd_myservice ao seu livro de receitas. Você pode usar o conteúdo em esta resposta como base para esse arquivo. Este é o arquivo que emprega o pacote "daemon" para executar um script como um serviço.

Além disso, a seguinte questão pode conter informações relevantes se você estiver tendo problemas em definir um serviço e criar seu script init.d na mesma receita.

    
por 18.02.2013 / 13:27