我正在尝试使用ansible在Windows主机中启动python服务。我尝试过使用Start-Job和Start-Process,如下所示。但我无法得到确切的结果。
使用Start-Job
Start-Job -ScriptBlock {Start-Process C:\Users\voiceqa\ansitest\Scripts\python.exe C:\Users\voiceqa\ansitest\Scripts\run_wireshark_service.py -PassThru -RedirectStandardError C:\Users\voiceqa\error.txt -RedirectStandardOutput C:\Users\voiceqa\output.txt -NoNewWindow
问题是,一旦ansible退出会话,Start-Job就会停止,它会终止正在运行的进程。
使用Start-Process
Start-Process powershell -ArgumentList "C:\Users\voiceqa\ansitest\Scripts\python.exe C:\Users\voiceqa\ansitest\Scripts\run_wireshark_service.py" -WindowStyle Hidden -RedirectStandardError C:\Users\voiceqa\error.txt -RedirectStandardOutput C:\Users\voiceqa\output.txt -PassThru
Start-Process C:\Users\voiceqa\ansitest\Scripts\python.exe -ArgumentList "C:\Users\voiceqa\ansitest\Scripts\run_wireshark_service.py" -WindowStyle Hidden -RedirectStandardError C:\Users\voiceqa\error.txt -RedirectStandardOutput C:\Users\voiceqa\output.txt -PassThru -UseNewEnvironment| Export-Clixml -Path C:\Users\voiceqa\wiresharkservice.xml
Start-Process C:\Users\voiceqa\ansitest\Scripts\python.exe C:\Users\voiceqa\ansitest\Scripts\run_wireshark_service.py -PassThru -NoNewWindow
我尝试了所有这些。所有这些都有同样的问题。 Ansible正在等待这些命令完成(它不会),如图所示
答案 0 :(得分:1)
在当前发布的Ansible版本中,这很棘手。即使您设法通过raw:
来设置任务(这可能会有一些跳跃),WinRM也不会让命令完成,直到所有进程都退出(WinRM在Windows作业对象下运行所有内容) 。你必须逃避这份工作。
Ansible 2.2将具有async,win_shell和win_command,但是异步并不是当前正确的事情,因为它会使一个看门狗进程运行,这将在异步超时结束后终止子进程。我一直在测试一个"分离"命令/ shell的选项,允许您执行您想要的操作(不确定它是否已准备好通过2.2模块冻结黄金时段)。
如果您真的在运行某项服务,我建议您将其设置为Windows服务(直接,通过sc或使用类似NSSM的服务)。
如果没有,你可以在当前版本的Ansible中运行后台进程(只要你不需要访问已启动进程的stdin / stdout / stderr){{ 1}}和WMI是这样的:
raw: