Ansible 'shell' 任务失败,但命令可以直接在主机上执行

Ansible 'shell' 任务失败,但命令可以直接在主机上执行

我的剧本中有一项任务是终止所有给定名称的进程:

- name: stop twd if running
      #shell: ps auxww | grep 'twd' | awk '{print $2}' | xargs kill -9
      shell: pkill pwd
      become: yes
      ignore_errors: yes

它返回非零代码,并且调试模式没有告诉我失败的原因,它只说:

"invocation": {
        "module_args": {
            "_raw_params": "pkill twd",
            "_uses_shell": true,
            "argv": null,
            "chdir": null,
            "creates": null,
            "executable": null,
            "removes": null,
            "stdin": null,
            "warn": true
        }
    }, 
    "msg": "non-zero return code", ...

为什么当运行命令的用户为真时它会失败,而当我在远程计算机上运行相同的命令时,它会正常工作。从文档中可以看出,“shell”任务的工作方式与通过远程计算机上的 shell 运行命令完全相同,为什么它会失败?它可以执行其他命令,但无法执行我发送的终止进程的命令。
这是在远程计算机上运行命令的结果,返回退出代码 0:

root@mos:~# pkill twd
root@mos:~# echo $?
0

类似的问题,这里,建议我们在使用管道或需要访问环境变量时使用“shell”而不是“command”,它还建议如果这不是真正的失败,则添加 ignore_error。我使用了 shell 和上面使用管道的注释任务,但它不起作用,甚至在使用不包含任何管道的“pkill”命令后,它也会失败。

相关内容