プレイブックには、指定された名前のすべてのプロセスを強制終了するタスクがあります。
- 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 であるのに、リモート マシンで同じコマンドを実行すると機能するのに、なぜ失敗するのでしょうか。ドキュメントによると、「シェル」タスクは、リモート マシンでシェルを介してコマンドを実行するのとまったく同じように機能しますが、なぜ失敗するのでしょうか。他のコマンドは実行できますが、プロセスを強制終了するために送信するコマンドの実行に失敗します。
これは、終了コード 0 を返すリモート マシンでコマンドを実行した結果です。
root@mos:~# pkill twd
root@mos:~# echo $?
0
同様の質問ですが、ここは、パイプを使用する場合や環境変数にアクセスする必要がある場合に、「command」ではなく「shell」を使用する必要があることを示唆しています。また、これが実際の失敗ではない場合は ignore_error を追加することも示唆しています。私は、パイプを使用する上記のコメント付きタスクとシェルを使用しましたが、機能せず、パイプを含まない「pkill」コマンドを使用した後でも失敗します。