명령을 호스트에서 직접 실행할 수 있는 동안 Ansible '셸' 작업이 실패합니다.

명령을 호스트에서 직접 실행할 수 있는 동안 Ansible '셸' 작업이 실패합니다.

내 플레이북에는 특정 이름의 모든 프로세스를 종료하는 작업이 있습니다.

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

0이 아닌 코드를 반환하고 디버그 모드에서는 실패한 이유를 알려주지 않고 다음과 같이만 말합니다.

"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이고 원격 시스템에서 동일한 명령을 실행하면 작동하는 이유는 무엇입니까? 문서에 따르면 '쉘' 작업은 원격 시스템의 쉘을 통해 명령을 실행하는 것과 정확히 동일하게 작동합니다. 왜 실패합니까? 다른 명령을 실행할 수 있지만 프로세스를 종료하기 위해 보낸 명령을 실행하지 못합니다.
이는 종료 코드 0을 반환하는 원격 시스템에서 명령을 실행한 결과입니다.

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

비슷한 질문,여기, 파이프를 사용하거나 env 변수에 액세스해야 할 때 'command' 대신 'shell'을 사용해야 한다고 제안하고, 이것이 실제 실패가 아닌 경우에는ignore_error를 추가하도록 제안합니다. 위에서 파이프를 사용하는 쉘과 주석 처리된 작업을 사용했는데 작동하지 않았고 파이프가 포함되지 않은 'pkill' 명령을 사용한 후에도 실패했습니다.

관련 정보