Обновить
1
0

Пользователь

Отправить сообщение

Не все так однозначно выглядит с включением опции pipefail при использовании set -e не смотря на тучу рекомендаций в сети использовать такую конструкцию для повышения безопасности использования shell-скриптов в Bash.
Обратимся к документации:

"The exit status of a pipeline is the exit status of the last command in the pipeline, unless the pipefail option is enabled (see The Set Builtin). If pipefail is enabled, the pipeline’s return status is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands exit successfully."

Получается, что в случае если команда, находящаяся где то в середине или начале конвеера завершится с ошибкой, то она останется незамеченной, а при использовании set -e просто не приведет к аварийному завершению скрипта.
Как предложенная защита поможет в случае с
echo "$dir" | xargs -n 1 -P 4 bash -c можете показать наглядно?

Спасибо.
Вот тоже по Вашему примеру решил попробовать "синтетикой" поймать разницу между подачей аргументов на вход xargs с пробелом в качестве разделителя и с переносом строки.

# cat line.sh
#!/bin/bash
dir="RSS PAGE CPU1 CPU2 CPU3 SWAP IOTOP"
echo "$dir" | xargs -n 1 -P 4
# cat column.sh
#!/bin/bash
dir=$(cat <<EOF
RSS
PAGE
CPU1
CPU2
CPU3
SWAP
IOTOP
EOF
)
echo "$dir" | xargs -n 1 -P 4

Получились следующие результаты:

# time ./line.sh
RSS
PAGE
CPU1
CPU2
CPU3
SWAP
IOTOP

real    0m0.015s
user    0m0.008s
sys     0m0.008s

# time ./column.sh
RSS
PAGE
CPU1
CPU2
CPU3
SWAP
IOTOP

real    0m0.014s
user    0m0.006s
sys     0m0.010s

Плюс:

# time ./line.sh
RSS
PAGE
CPU1
CPU2
CPU3
SWAP
IOTOP

real    0m0.015s
user    0m0.008s
sys     0m0.008s

# time ./column.sh
RSS
PAGE
CPU1
CPU2
CPU3
SWAP
IOTOP

real    0m0.017s
user    0m0.005s
sys     0m0.013s

Какого-то существенного преимущества по времени не увидел.

Верно пишите, такое решение снимает "предохранитель" и его действительно не придется "чистить руками" и это дает возможность запуска скрипта в проде дальше по расписанию, но к сожалению без анализа причин его падения. Такое поведение полагаю допустимо в тестовых зонах или со слабой критичностью. Если скрипт выпал с ошибкой, то нужно не запускать его повторно, а провести расследование инцидента и предпринять меры для устранения таких "падений" в Проде и только тогда снимать "предохранитель" удалив lock-файл и вот тогда уж и пускай дальше работает.

1. Можете наглядно продемонстрировать чем лучше? С удовольствием бы взял на вооружение.
2. Спасибо. Поправил.
3. Нет такого что чем-то не устраивает. Xargs принимает команды со стандартного ввода, разделенные пробелом или переводом строки. Поэтому допустимы оба варианта к использованию.

Grafana c тучей других метрик есть. Есть и Zabbix тоже. Задача была сделать именно логирование, которое работает, в том числе в случае полной сетевой изоляции хоста.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность