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", ...

為什麼當運行命令的使用者是 true 並且當我在遠端電腦上運行相同的命令時它會失敗,它會起作用。從文件來看,「shell」任務的工作方式與透過遠端電腦上的 shell 運行命令完全相同,為什麼會失敗?它可以執行其他命令,但無法執行我發送的殺死進程的命令。
這是在遠端電腦上執行命令的結果,該命令返回退出代碼 0:

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

類似的問題,這裡,建議當我們使用管道或需要存取環境變數時,應該使用“shell”而不是“命令”,如果這不是真正的失敗,它還建議添加ignore_error。我使用了 shell 和上面使用管道的註釋任務,但它不起作用,即使在使用不包含任何管道的“pkill”命令之後,它也會失敗。

相關內容