Архив метки: bash

Multips в Munin

Решил тут сделать стату в Munin для каждого PHP-FPM-пула в отдельности, на глаза попался (ок, гуглоИИ подсказал) плагин multips. Плагин в итоге не подошел (толку мне с простого числа процессов, я хочу подробную стату, как в proc), но суть не в том. В процессе разбора того, как заставить эту хрень работать — дошел до основного кода за неизвестным авторством:

for name in $names; do
***
PGREP=$(command -v pgrep)
if [ -n "$PGREP" ] && [ -x "$PGREP" ]; then
"$PGREP" -f -l "$name" | grep "$REGEX" | wc -l
***
else
ps auxwww | grep "$REGEX" | grep -v grep | wc -l
fi
done

Т.е., если у нас в системе есть pgrep — значит, имя в конфиге должно строго соответствовать процессу, который ищешь. А если нет — ты волен называть сущность в конфиге как хочешь.

В итоге конфиг вида:

[multips]
env.names jw_wiki
env.jw_wiki php-fpm.*jabberworld.info

не работал прежде всего из-за наличия pgrep.

А всего-то надо было сделать что-то в стиле "$PGREP" -a -c -f -l "$REGEX"

Открыл для себя bzexe

Сабж. Чисто случайно заметил в консоли такую команду (есть в штатной поставке bzip2), открыл ман, и…

rain@walkbook:/tmp$ cp /bin/bash .
rain@walkbook:/tmp$ bzexe bash
bash: 2.179:1, 3.671 bits/byte, 54.11% saved, 1099016 in, 504377 out.
rain@walkbook:/tmp$ ls -la /bin/bash bash
bash bash~
rain@walkbook:/tmp$ ls -la /bin/bash bash
-rwxr-x— 1 rain rain 505031 ноя 29 21:58 bash
-rwxr-xr-x 1 root root 1099016 май 15 2017 /bin/bash
rain@walkbook:/tmp$ ./bash
rain@walkbook:/tmp$ file bash
bash: POSIX shell script executable (binary data)

Вполовину меньшего размера бинарник, который можно выполнять ценой потери скорости запуска :). Обычный шелл-скрипт+архив в стиле, например, установщиков дров для Nvidia/AMD.

Взял на заметку.

Команда 404

По мотивам треда на ЛОРе. Оказывается, есть встроенная функция, вызываемая, если шелл не находит команду — которую, в принципе, можно переопределить:

rain@walkbook:~$ cmd
bash: cmd: команда не найдена
rain@walkbook:~$ command_not_found_handle() { echo 404; }
rain@walkbook:~$ cmd
404

Не знал. Не забываем, кстати, про коды выхода. Если штатно в такой ситуации код выхода != 0, то в примере выше функция завершится со вполне корректным статусом. Т.е., надо что-то вроде command_not_found_handle() { echo 404; exit 1; }