logrotate: ротация логов nginx и приложений

logrotate архивирует, сжимает и удаляет старые логи по расписанию. Конфиг для nginx уже есть в /etc/logrotate.d/nginx. Пример для своего приложения: /var/log/myapp/*.log { daily rotate 14 compress delaycompress missingok notifempty create 0640 www-data adm postrotate systemctl reload myapp endscript } Ключевые директивы: rotate 14 — хранить 14 файлов, потом удалять compress / delaycompress — сжимать в gzip, но не текущий missingok — не падать, если лог отсутствует postrotate — перезагрузить сервис после ротации (иначе он пишет в старый fd) # проверить конфиг без применения logrotate -d /etc/logrotate.d/myapp # принудительная ротация logrotate -f /etc/logrotate.d/myapp Состояние ротации хранится в /var/lib/logrotate/status — там видно, когда каждый файл ротировался последний раз. ...

3 июня 2026 г. · llexa

lsof: кто держит файл и какие порты открыты

lsof (list open files) показывает, какой процесс держит файл, сокет или порт. # кто держит конкретный файл lsof /var/log/nginx/access.log # все открытые файлы процесса lsof -p 1234 # все открытые файлы в директории (рекурсивно) lsof +D /var/www/html # открытые сетевые соединения lsof -i # слушающие TCP-порты lsof -i TCP -s TCP:LISTEN # кто занял порт 80 lsof -i :80 Почему файл нельзя удалить или размонтировать: # найти процесс, держащий точку монтирования lsof +D /mnt/data # удалённые файлы, которые ещё открыты (занимают место) lsof | grep deleted lsof -i выводит COMMAND, PID, USER, TYPE (TCP/UDP), NAME (адрес:порт). Сочетание с grep и -n (без DNS-резолвинга) ускоряет диагностику в 2–3 раза. ...

3 июня 2026 г. · llexa

rsync: инкрементальный бэкап

rsync копирует только изменившиеся блоки — быстрее cp и экономит трафик по SSH. # базовая синхронизация директории rsync -av /src/ /dst/ # предварительный просмотр без изменений rsync -av --dry-run /src/ /dst/ # исключить временные файлы и кэш rsync -av --exclude='*.tmp' --exclude='.cache/' /src/ /dst/ # по SSH с прогресс-баром rsync -avz --progress user@remote:/data/ /backup/data/ Скрипт инкрементального бэкапа с датой: #!/bin/bash SRC=/var/www/ DST=/backup/www/ DATE=$(date +%F) rsync -av --link-dest="$DST/latest" \ --exclude='*.log' \ "$SRC" "$DST/$DATE/" ln -sfn "$DST/$DATE" "$DST/latest" --link-dest создаёт жёсткие ссылки на неизменившиеся файлы — каждый снапшот занимает только дельту. Удалять старые снапшоты безопасно: файлы не пропадают, пока на них есть хотя бы одна ссылка. ...

3 июня 2026 г. · llexa

find: продвинутые фильтры

find умеет фильтровать по времени, размеру и типу — не только по имени. # файлы старше 7 дней find /var/log -name "*.log" -mtime +7 # файлы больше 100 МБ find /home -size +100M # выполнить команду над каждым файлом find . -name "*.bak" -exec rm {} \; # безопасно для имён с пробелами find . -name "*.tmp" -print0 | xargs -0 rm # исключить директорию find /etc -not -path "*/systemd/*" -name "*.conf" -mtime -7 — моложе 7 дней, +7 — старше. -exec вызывает команду для каждого файла отдельно; xargs быстрее на больших наборах. -not работает с любым предикатом. ...

2 июня 2026 г. · llexa

systemd-analyze: сколько грузится система

Один из быстрых способов понять, что тормозит загрузку. # общее время загрузки systemd-analyze # топ медленных юнитов systemd-analyze blame # цепочка критического пути systemd-analyze critical-chain # SVG-граф всей загрузки systemd-analyze plot > boot.svg blame — список юнитов по убыванию времени активации. critical-chain — только то, что реально задержало старт. plot строит SVG: открыть в браузере, искать длинные полосы. Подозрительно медленный юнит — systemctl status unit-name. #linux #systemd #sysadmin

2 июня 2026 г. · llexa

tmux: сессии, сплиты, автозапуск

tmux держит сессии живыми после разрыва SSH и делит экран на панели. tmux new -s work # новая именованная сессия tmux ls # список сессий tmux attach -t work # подключиться к сессии Ctrl+b d # отключиться (сессия живёт) Ctrl+b % # вертикальный сплит Ctrl+b " # горизонтальный сплит Ctrl+b → # переключить панель Минимальный ~/.tmux.conf: set -g mouse on set -g history-limit 10000 set -g base-index 1 Скрипт автозапуска окружения: #!/bin/bash tmux new-session -d -s dev tmux send-keys -t dev 'vim .' Enter tmux split-window -t dev -h tmux send-keys -t dev 'git status' Enter tmux attach -t dev Запускаешь один раз — рабочее пространство поднимается целиком. ...

2 июня 2026 г. · llexa

Proxmox: снапшоты VM через qm snapshot

Снапшот VM одной командой — без веб-интерфейса. qm snapshot 101 before-update --vmstate 1 qm listsnapshot 101 qm rollback 101 before-update qm delsnapshot 101 before-update --vmstate 1 сохраняет оперативную память: без него снапшот будет только дисковым и после rollback VM загрузится с нуля вместо продолжения работы. Откат — без выключения. Имя только латиницей; qm listsnapshot отдаёт дерево снапшотов с метками времени. #linux #proxmox #sysadmin #virtualization

1 июня 2026 г. · llexa

Vim с нуля #2: vim-plug и цветовая схема

Установить vim-plug одной командой: curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim Добавить в ~/.vimrc: call plug#begin() Plug 'morhetz/gruvbox' call plug#end() colorscheme gruvbox set background=dark Открыть Vim, выполнить :PlugInstall. После перезапуска — тёплая тёмная тема. Альтернатива: Plug 'dracula/vim' для холодной гаммы, colorscheme dracula. #linux #vim #sysadmin

1 июня 2026 г. · llexa

Архиваторы #2: zstd и параллельное сжатие

zstd — лучший баланс скорость/степень на современных ядрах. # сжать с использованием всех ядер zstd --threads=0 -19 file.tar -o file.tar.zst # через tar tar -I 'zstd -19 --threads=0' -cf archive.tar.zst ./dir/ # распаковать tar --zstd -xf archive.tar.zst Уровни 1–22: -3 — по умолчанию, -19 — хороший компромисс. --threads=0 берёт все ядра автоматически. На NVMe zstd быстрее xz в 10–20× при сравнимом сжатии. Для .gz — pigz, для .bz2 — pbzip2. ...

1 июня 2026 г. · llexa

5 стадий принятия cron

Отрицание: * * * * * ./script.sh Гнев: скрипт не запускается, логов нет, cron молчит Торг: */5 * * * * /usr/bin/env bash /absolute/path/script.sh >> /tmp/cron.log 2>&1 Депрессия: journalctl -u cron --since "1 hour ago" | grep -i fail Принятие: переписываешь на systemd.timer, и он работает с первого раза #linux #bash #cron #юмор #sysadmin

31 мая 2026 г. · llexa