Tenho uma tarefa em meu manual para eliminar todos os processos de um determinado nome:
- name: stop twd if running
#shell: ps auxww | grep 'twd' | awk '{print $2}' | xargs kill -9
shell: pkill pwd
become: yes
ignore_errors: yes
Ele retorna código diferente de zero e o modo de depuração não me explica por que falhou, apenas diz:
"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", ...
Por que falha enquanto o usuário que executa o comando é verdadeiro e quando executo o mesmo comando na máquina remota, funciona. A partir dos documentos, a tarefa 'shell' funciona exatamente da mesma forma que executar o comando através do shell na máquina remota, por que ela falha? Ele pode executar outros comandos, mas não consegue executar os comandos que envio para encerrar o processo.
este é o resultado da execução do comando na máquina remota que retorna o código de saída 0:
root@mos:~# pkill twd
root@mos:~# echo $?
0
Uma pergunta semelhante,aqui, sugere que devemos usar 'shell' em vez de 'command' quando usamos pipe ou quando precisamos acessar uma variável env, também sugere adicionar ignore_error se isso não for uma falha real. Usei shell e a tarefa comentada acima que usa pipe e não funcionou e mesmo depois de usar o comando 'pkill' que não inclui nenhum pipe, ele falha.