logrotate скрипты
Тема дорожной карты · Bash
logrotate — стандартная Linux-утилита для автоматической ротации, сжатия и удаления старых лог-файлов; настраивается через /etc/logrotate.conf и дополнительные файлы в /etc/logrotate.d/, определяющие политики ротации директивами daily, weekly, rotate 7, compress, missingok и postrotate. Bash-скрипты интегрируются с logrotate через блоки скриптов postrotate и prerotate — встроенный shell-скрипт, выполняемый после или перед каждой ротацией, — что позволяет автоматизировать задачи вроде перезагрузки службы через systemctl reload nginx, чтобы она начала писать в новый лог-файл. Для управления журналами на основе Bash без logrotate shell-скрипт может использовать mv app.log app.log.1 && gzip app.log.1 && : > app.log в сочетании с сигналом kill -USR1 $pid приложению, обеспечивая ручную ротацию журналов на системах Linux, где logrotate недоступен. Директива copytruncate в logrotate важна для приложений, держащих дескрипторы лог-файлов открытыми: она копирует текущий журнал перед усечением оригинала, а не переименовывает его, — нюанс, который инженеры автоматизации Bash должны понимать для предотвращения потери данных. Написание эффективных скриптов ротации журналов и конфигураций logrotate — ключевой навык системного администрирования Linux, помогающий контролировать использование диска в производственных средах автоматизации.
Как это работает
logrotate скрипты: распространённые паттерны — ежедневные cron-задания, ротация логов, backup-скрипты, deployment-автоматизация, service health-check, system-level клей между unix-тулами. Комбинируйте с systemd (.service + .timer units) вместо cron, когда нужны логи + restart-on-failure + зависимости. Расписание: cron (просто), systemd timers (современнее + интегрировано), Ansible (multi-host).
Когда применять
Bash — для "связать эти тулы вместе" автоматизации (rsync + tar + ssh + email). Переходите на Ansible/Python/Go, когда скрипт растёт за ~200 строк, требует структурированных данных или multi-host координации. Всегда логируйте в syslog или файл с timestamps — сбои диагностируемы.
Типичные ошибки
Ловушки logrotate скрипты: cron без логирования (job падает 6 месяцев, никто не замечает); скрипты с расчётом, что PATH такой же, как в вашем shell (cron имеет минимальный env — задавайте PATH явно); root-owned скрипты, зовущиеся из www-data через sudo NOPASSWD (privesc-поверхность — минимизируйте sudoable).