In meinem Playbook habe ich die Aufgabe, alle Prozesse eines bestimmten Namens zu beenden:
- name: stop twd if running
#shell: ps auxww | grep 'twd' | awk '{print $2}' | xargs kill -9
shell: pkill pwd
become: yes
ignore_errors: yes
Es wird ein Code ungleich Null zurückgegeben und der Debugmodus gibt mir keinen Hinweis darauf, warum der Fehler aufgetreten ist. Er besagt lediglich:
"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", ...
Warum schlägt es fehl, wenn der Benutzer, der den Befehl ausführt, „true“ ist und wenn ich denselben Befehl auf dem Remotecomputer ausführe, funktioniert es. Laut den Dokumenten funktioniert die „Shell“-Aufgabe genauso wie das Ausführen des Befehls über die Shell auf dem Remotecomputer. Warum schlägt es fehl? Es kann andere Befehle ausführen, aber es schlägt fehl, die Befehle auszuführen, die ich sende, um den Prozess zu beenden.
Dies sind die Ergebnisse der Ausführung des Befehls auf dem Remotecomputer, der den Exitcode 0 zurückgibt:
root@mos:~# pkill twd
root@mos:~# echo $?
0
Eine ähnliche Frage,Hier, schlägt vor, dass wir „Shell“ statt „Command“ verwenden sollten, wenn wir Pipes verwenden oder auf eine Umgebungsvariable zugreifen müssen. Außerdem wird vorgeschlagen, ignore_error hinzuzufügen, wenn es sich nicht um einen echten Fehler handelt. Ich habe Shell und die oben kommentierte Aufgabe verwendet, die Pipes verwendet, und es hat nicht funktioniert, und selbst nach Verwendung des Befehls „pkill“, der keine Pipes enthält, schlägt es fehl.