如何启动自定义 (python) 服务并使用 ansible 在 powershell 中继续?
How to fire a custom (python) service and continue in powershell using ansible?
我正在尝试使用 ansible 在 windows 主机中启动 python 服务。我尝试如下使用 Start-Job 和 Start-Process。但是我无法得到准确的结果。
使用开始作业
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 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 正在等待这些命令完成(它不会),如图所示
我所需要的只是启动这个 python 服务并继续其余的工作。我怎样才能实现这个功能?欢迎任何帮助。
在 currently-released 版本的 Ansible 中很难做到。即使您设法通过 raw:
将任务置于后台(某些 hoop-jumping 是可能的),WinRM 也不会让命令完成,直到所有进程退出(WinRM 运行 下的所有内容Windows 工作 object)。你必须逃避工作。
Ansible 2.2 将具有异步、win_shell 和 win_command,但异步目前不是正确的做法,因为它留下了一个看门狗进程 运行ning,它将杀死 child 异步超时结束后的进程。我一直在测试 command/shell 的 "breakaway" 选项,它可以让你做你想做的事(但不确定它是否会在 2.2 模块冻结时准备好进入黄金时段)。
如果您确实要 运行 服务,我建议将其设置为 Windows 服务(直接通过 sc,或使用 NSSM 之类的东西)。
如果那是 no-go,您可以在当前版本的 Ansible 中 运行 后台进程(只要您不需要访问已启动进程的 stdin/stdout/stderr)通过 raw:
和 WMI,如下所示:
raw: ([wmiclass]"Win32_Process").Create("myprocess.exe /option1 /option2")
我正在尝试使用 ansible 在 windows 主机中启动 python 服务。我尝试如下使用 Start-Job 和 Start-Process。但是我无法得到准确的结果。
使用开始作业
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 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 正在等待这些命令完成(它不会),如图所示
在 currently-released 版本的 Ansible 中很难做到。即使您设法通过 raw:
将任务置于后台(某些 hoop-jumping 是可能的),WinRM 也不会让命令完成,直到所有进程退出(WinRM 运行 下的所有内容Windows 工作 object)。你必须逃避工作。
Ansible 2.2 将具有异步、win_shell 和 win_command,但异步目前不是正确的做法,因为它留下了一个看门狗进程 运行ning,它将杀死 child 异步超时结束后的进程。我一直在测试 command/shell 的 "breakaway" 选项,它可以让你做你想做的事(但不确定它是否会在 2.2 模块冻结时准备好进入黄金时段)。
如果您确实要 运行 服务,我建议将其设置为 Windows 服务(直接通过 sc,或使用 NSSM 之类的东西)。
如果那是 no-go,您可以在当前版本的 Ansible 中 运行 后台进程(只要您不需要访问已启动进程的 stdin/stdout/stderr)通过 raw:
和 WMI,如下所示:
raw: ([wmiclass]"Win32_Process").Create("myprocess.exe /option1 /option2")