Когда bash-скрипт работает в продакшене, важно понимать окружение: доступные ресурсы, нагрузку, ограничения. Знакомимся:
getconf, ulimit, vmstat, iostat - системные команды, которые можно встраивать прямо в bash для более "умных" решений.▪️ getconf: узнать параметры системы
echo "Page size: $(getconf PAGESIZE)"
echo "Максимум аргументов в командной строке: $(getconf ARG_MAX)"
Можно использовать перед запуском ресурсоемких команд, чтобы адаптировать размер батчей, буферов и т.д.
▪️ ulimit: узнать и задать ограничения
echo "Открытых файлов можно: $(ulimit -n)"
ulimit -c 0 # Запретить core dumps
Полезно перед форком процессов: не дайте скрипту уронить систему из-за 10000 открытых файлов.
▪️ vmstat: мониторинг памяти и нагрузки
vmstat 1 2 | tail -1 | awk '{print "Свободная память: " $4 " KB, ожидание I/O: " $16}'
Используй для самодиагностики скриптов: если скрипт замечает, что система в swap - можно приостановить запуск тяжелых задач.
▪️ iostat: здоровье диска
iostat -dx 1 2 | grep sda | tail -1 | awk '{print "IO util: " $NF "%"}'
Если util% > 90 - диск перегружен. Скрипт может решить подождать или отложить копирование.
▪️ Пример: скрипт отложенного запуска при перегрузке
wait_for_idle() {
while :; do
util=$(iostat -dx 1 2 | awk '/sda/ {u=$NF} END{print int(u)}')
[[ $util -lt 50 ]] && break
echo "Диск занят ($util%), ждём..."
sleep 5
done
}
Скрипты могут быть "умными", если читают данные от системы: не запускай, если ресурсов нет, не ломай лимиты.
BashTex 📱 #bash #utils