Отладка спорадических ошибок сценария оболочки 141

Вам необходимо перезапустить rpcbindпосле gluster volume set volume_name nfs.disable off.

Ваша громкость будет такой:

Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick vol01:/tmp/teste                      49197     0          Y       4321

Brick vol02:/tmp/teste                      49197     0          Y       4619

NFS Server on localhost                     2049      0          Y       4341

Self-heal Daemon on localhost               N/A       N/A        Y       4349

NFS Server on ftp02-sp.dcdsr.local          N/A       N/A        N       N/A

Self-heal Daemon on ftp02-sp.dcdsr.local    N/A       N/A        Y       4647

Task Status of Volume teste1
------------------------------------------------------------------------------
There are no active volume tasks
2
15.04.2020, 03:58
1 ответ

После того, как head -1выполнит свою работу, он завершится независимо от того, удалось ли sort -nrзаписать все данные в канал. Если sortесть что еще написать и headбольше нет, то sortполучит SIGPIPE.

Ничего не взрывается. Так работают трубы. Когда вы используете headв канале, вас не должно удивлять, если предыдущая команда завершается из-за SIGPIPE.


Простой тест с yesвместоsort:

$ set -o pipefail
$ yes | head -n 1
y
$ printf '%s\n' "$?" "${PIPESTATUS[@]}"
141             <- overall exit status
141             <- from `yes'
0               <- from `head'

Статус выхода — 141и исходит из yes.

Здесь показано, как отлаживать :путем изучения ${PIPESTATUS[@]}.


Ожидаемое поведение. Используйте подоболочку вместоyes(или в вашем случае вместо sort), чтобы управлять статусом выхода этой части канала. Пример:

$ set -o pipefail
$ (yes; true) | head -n 1
y
$ printf '%s\n' "$?" "${PIPESTATUS[@]}"
0
0
0

Более сложная логика для подавления только141:

(yes; e="$?"; [ "$e" -eq 141 ] && exit 0; exit "$e") | head -n 1
3
19.03.2021, 02:28

Теги

Похожие вопросы