Путеводитель в DevOps. Меня зовут Роман Шубин, я действующий DevOps инженер, амбассадор Selectel и это мой авторский блог. Здесь я самобытно пишу про разработку, devops, linux, bash скрипты, тестирование, сисадминство, техдирство, пиэмство и за айтишную жизу.
Больше профильных постов про DevOps в моем Telegram-канале.
Живая лента
Загрузка...
Как OOM Killer выбирает процессы в Linux
Разбираемся, почему Linux при нехватке памяти завершает не обязательно самый большой процесс. Смотрим oom_score и oom_adj, меняем вероятность завершения процесса и задаём OOMScoreAdjust в systemd-юните.
Как автоматически перемонтировать SSHFS через systemd
Монтируем удалённое хранилище через SSHFS и берём подключение под контроль systemd. Создаём mount-, timer- и service-юниты, которые ждут сеть, проверяют маркерный файл и автоматически перемонтируют шару после сбоя.
Как восстановить удалённый лог через файловый дескриптор
Воспроизводим ситуацию, когда процесс продолжает писать в удалённый лог через открытый файловый дескриптор. Восстанавливаем содержимое через /proc, а затем с помощью GDB переключаем работающий процесс на новый файл без перезапуска.
Как запускать команды на нескольких серверах через PSSH
Используем пакет PSSH для параллельного запуска команд и копирования файлов на группу Linux-серверов. Настраиваем SSH-ключи и файл инвентаря, работаем с parallel-ssh, parallel-scp, prsync, pnuke и pslurp.
Как запускать команды параллельно в Bash
Запускаем фоновые команды в Bash через оператор &, управляем заданиями с помощью wait и jobs и получаем PID через $!. Собираем параллельный загрузчик файлов и сравниваем нативный подход с GNU Parallel.
Как настроить rate limit в Nginx
Настраиваем ограничение запросов в Nginx через limit_req_zone, geo и map. Разбираем размер зоны памяти, параметры rate, burst и nodelay, белый список IP-адресов и возврат HTTP 429 вместо стандартной ошибки 503.
Как передавать события сигналами реального времени в Bash
Строим взаимодействие между Bash-процессами через сигналы SIGRTMIN и trap без временных файлов. Пишем сервер-слушатель и клиент, разделяем события по индексам сигналов и разбираем порядок обработки и приоритеты.
Как работают разрежённые файлы в Linux
Разбираемся, как sparse-файлы экономят физическое место на диске, но сохраняют заявленный логический размер. Создаём разрежённый файл через dd и truncate, форматируем его в ext4 и выясняем, как эту технологию используют виртуализация, базы данных и облачные хостеры.
Как устроены версии shared libraries в Linux
Разбираем устройство разделяемых библиотек Linux, их полные имена, soname и компоновочные ссылки. Смотрим правила major, minor и patch, создаём библиотеку через gcc и проверяем зависимости с ldconfig и ldd.
Почему base64 превращается в Jase64
Разбираем странный вывод Jase64 вместо base64 с помощью strace и системного вызова write. Смотрим, как ESC-последовательности проходят через псевдотерминал и почему эмулятор терминала скрывает первый символ сообщения об ошибке.