Логи имеют неприятную привычку расти бесконечно. Ниже простой скрипт, который следит за возрастом и размером логов: старые архивирует, слишком большие режет или удаляет.
▪️ Логика
логи старше N дней перемещаем в .gz;
логи больше X МБ убираем в архив или удаление;
все работает без logrotate;
🛠 Скрипт
LOG_DIR="/var/log/myapp"
MAX_DAYS=7
MAX_SIZE_MB=100
find "$LOG_DIR" -type f -name "*.log" | while read -r file; do
size_mb=$(du -m "$file" | awk '{print $1}')
# Архивируем старые логи
if [[ $(find "$file" -mtime +$MAX_DAYS) ]]; then
gzip -f "$file"
continue
fi
# Архивируем слишком большие
if (( size_mb > MAX_SIZE_MB )); then
gzip -c "$file" > "${file}.gz"
: > "$file" # обнуляем без удаления
fi
done
▪️ Что здесь важно
find -mtime - контроль по времениdu -m - размер в мегабайтах: > file - безопасное обнуление без потери inodegzip -c - архив без удаления исходникаBashTex 📱 #bash #utils