Задача 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' работает точно так же, как запуск команды через оболочку на удаленной машине, почему это не удается? Она может выполнять другие команды, но не может выполнить команды, которые я отправляю, чтобы убить процесс.
Вот результаты запуска команды на удаленной машине, которая возвращает код выхода 0:

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

Похожий вопрос,здесь, предлагает использовать «shell» вместо «command», когда мы используем pipe или когда нам нужно получить доступ к переменной env, а также предлагает добавить ignore_error, если это не реальный сбой. Я использовал shell и прокомментированную выше задачу, которая использует pipe, и это не сработало, и даже после использования команды «pkill», которая не включает в себя никакого pipe, она терпит неудачу.

Связанный контент