如何使用ansible触发自定义(python)服务并在powershell中继续?

时间:2016-09-01 02:30:29

标签: python powershell ansible ansible-playbook

我正在尝试使用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正在等待这些命令完成(它不会),如图所示

Here 我需要的只是解雇这个python服务并继续其余的工作。我该如何实现此功能?欢迎任何帮助。

1 个答案:

答案 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: