Tengo una tarea en mi libro de jugadas para eliminar todos los procesos de un nombre determinado:
- name: stop twd if running
#shell: ps auxww | grep 'twd' | awk '{print $2}' | xargs kill -9
shell: pkill pwd
become: yes
ignore_errors: yes
Devuelve código distinto de cero y el modo de depuración no me da por qué ha fallado, solo dice:
"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 qué falla mientras el usuario que ejecuta el comando es verdadero y cuando ejecuto el mismo comando en la máquina remota, funciona. Según los documentos, la tarea 'shell' funciona exactamente igual que ejecutar el comando a través del shell en la máquina remota, ¿por qué falla? Puede ejecutar otros comandos, pero no ejecuta los comandos que envío para finalizar el proceso.
Este es el resultado de ejecutar el comando en la máquina remota que devuelve el código de salida 0:
root@mos:~# pkill twd
root@mos:~# echo $?
0
Una pregunta similar,aquí, sugiere que deberíamos usar 'shell' en lugar de 'command' cuando usamos pipe o cuando necesitamos acceder a una variable env, también sugiere agregar ignore_error si esto no es un error real. Utilicé Shell y la tarea comentada anteriormente que usa tubería y no funcionó e incluso después de usar el comando 'pkill' que no incluye ninguna tubería, falla.