내 플레이북에는 특정 이름의 모든 프로세스를 종료하는 작업이 있습니다.
- 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' 명령을 사용한 후에도 실패했습니다.