2016-03-29 113 views
1

我有以下代码(注释,我试图以及交替代码)厨师配方窗口命令块厨师运行

#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文件一台服务器。现在启动进程,它应该打开一个新的cmd,然后在那里运行服务器,但在原来的cmd中它退出到一个新行。

当我通过厨师运行它时,它(我认为)正在跟踪进程中的所有子cmd,并在运行此部分后等待服务器被终止后卡住。

有没有办法在厨师/窗户解决它?

回答

1

你可能应该安装一个实际的服务,而不是尝试从厨师内部分流后台作业。检查出windows_service resource

+0

没有一个选项,谢谢 – Scooby

+0

然后,你需要别的东西来创建一个单独的执行上下文。在PowerShell中可能有这样的一些东西,但常见的模式是使用预定任务集在0秒内执行。 – coderanger