logrotate: ротация логов без самописных cron-скриптов

Приложение без встроенной ротации логов рано или поздно съедает диск. logrotate решает это декларативно: конфиг сервиса — в /etc/logrotate.d/, общие настройки — в /etc/logrotate.conf. Минимальный конфиг: /var/log/myapp/*.log { daily rotate 14 compress delaycompress postrotate systemctl reload myapp endscript } rotate 14 — сколько копий хранить, delaycompress откладывает сжатие последней копии на цикл вперёд — иначе процесс, ещё пишущий в старый file descriptor, получит на руки уже гзипнутый файл. postrotate/endscript — команда после ротации, обычно переоткрыть лог демону. ...

September 22, 2026 · llexa

systemd timers вместо cron: когда это оправдано

Таймер systemd — это два юнита: .timer задаёт расписание, .service — что выполнить. Не замена cron ради моды — таймер даёт то, чего у cron нет: журналирование через journald, зависимости между юнитами, и самое полезное — Persistent=true. # /etc/systemd/system/backup.timer [Timer] OnCalendar=daily Persistent=true [Install] WantedBy=timers.target Persistent=true запускает пропущенный job сразу после старта системы, если она была выключена в момент срабатывания — у cron такого нет, пропущенный запуск в down-time просто теряется. ...

September 17, 2026 · llexa

udev: почему флешка каждый раз /dev/sdb, и как это исправить

Имя /dev/sdb — не гарантия: порядок инициализации USB-дисков при следующей загрузке может измениться. udev привязывает своё имя к устройству по атрибутам, а не по порядку обнаружения. udevadm info -a -n /dev/sdb # атрибуты устройства udevadm monitor # события подключения в реальном времени # /etc/udev/rules.d/99-backup-disk.rules SUBSYSTEM=="block", ATTRS{serial}=="WD-WCC4E1234567", SYMLINK+="backup-disk", OWNER="backup" Правило матчится по ATTRS{serial} и создаёт ссылку /dev/backup-disk на нужный диск — тот же принцип, что у /dev/disk/by-uuid/. udevadm control --reload-rules udevadm trigger --attr-match=subsystem=block # применить без переподключения #linux #systemd ...

September 3, 2026 · llexa

systemd-nspawn: контейнер без Docker за одну команду

Когда нужен один изолированный Linux, а поднимать Docker ради этого избыточно — есть systemd-nspawn, встроенный в systemd, без демона и без отдельного рантайма. debootstrap bookworm /var/lib/machines/mybox # подготовить rootfs systemd-nspawn -D /var/lib/machines/mybox --network-veth -b # запустить как систему (boot) machinectl list # список запущенных контейнеров machinectl shell mybox # зайти внутрь machinectl poweroff mybox -b запускает полноценный init внутри, а не одну команду — контейнер ведёт себя как отдельная машина. --network-veth поднимает veth-пару с NAT на хосте, без него контейнер живёт в сетевом namespace хоста. Для постоянных контейнеров — machinectl enable mybox, автозапуск через systemd. ...

July 30, 2026 · llexa

logger и systemd-cat: пишем в journald из bash

Скрипт, пишущий статус в свой файл в /var/log/, — ещё одна точка для ротации и мониторинга. logger шлёт сообщение прямо в syslog/journald, под общую ротацию и journalctl. logger -t backup-script -p user.err "disk full" # тег + приоритет journalctl -t backup-script # только свои сообщения systemd-cat оборачивает целую команду — её stdout/stderr: systemd-cat -t rsync-job rsync -av /data /backup/ journalctl -t rsync-job --since "10 min ago" Из cron: job.sh 2>&1 | logger -t rsync-job — результат ищется одной командой, без grep по файлам в /var/log/. Приоритет (err, warning) фильтрует по важности и вешает алерты на ошибки, не трогая шум. ...

July 20, 2026 · llexa

cgroups v2: лимиты CPU и RAM на сервис

systemd-cgls показывает дерево cgroup — какие процессы в каком слайсе сидят, без похода в /sys/fs/cgroup/ руками. systemd-cgls systemd-cgtop Лимит для конкретного сервиса ставится одной командой, без правки unit-файла: systemctl set-property nginx.service CPUQuota=50% MemoryMax=512M Изменения применяются сразу и переживают перезапуск сервиса — systemd пишет их в /etc/systemd/system.control/. Текущие значения видны прямо в файловой системе cgroup: cat /sys/fs/cgroup/system.slice/nginx.service/cpu.max cat /sys/fs/cgroup/system.slice/nginx.service/memory.max Если сервис выходит за MemoryMax — ядро убивает его через OOM killer внутри cgroup, не трогая остальную систему. ...

June 22, 2026 · llexa