Столкнулся с очередной загадкой.
Если на целевом хосте в SSH-консоли выполнить команду:
pkill -f nginx || true
То она успешно выполняется, код ошибки, видимый через команду echo $?, всегда нуливой.
Если ту же команду сделать через Ansible:
- name: "Остановка сервиса Nginx - дополнительный метод"
shell: "pkill -f nginx || true"
Тогда эта команда всегда заканчивается ненулевым кодом возврата:
fatal: [siteHost]: FAILED! => {
"changed": true,
"cmd": "pkill -f nginx || true",
"delta": "0:00:00.009630",
"end": "2023-07-01 15:35:48.555054",
"msg": "non-zero return code",
"rc": -15,
"start": "2023-07-01 15:35:48.545424",
"stderr": "",
"stderr_lines": [],
"stdout": "",
"stdout_lines": []}
Чтобы «съэмулировать» поведение Ansible, я в SSH-консоли удаленного хоста стал выполнять команды:
# bash -c "pkill -f nginx"
# echo $?
1
# bash -c "exec pkill -f nginx"
# echo $?
1
# bash -c "pkill -f nginx ; true"
Terminated
# echo $?
143
# bash -c "pkill -f nginx || true"
Terminated
# echo $?
143
Похоже, действительно у pkill есть какие-то особенности, которые влияют на код возврата. Но непонятно почему вызов true этот код не подавляет.
В общем, я не пойму как составить команду, которая будет завершаться нуливым кодом возврата в комбинации с pkill.