⚠️ ВАЖНО: find … -mtime +21 -delete
Флаг
Флаг
-delete необратимо удаляет файлы без корзины. Это применяется в задаче 3 для удаления старых архивов.
Всегда перед реальным запуском делайте тестовый прогон:
# Тестовый прогон — только показывает что будет удалено
find "$backup_location" -maxdepth 1 -type f -name "*.tar.gz" -mtime +21 -print
# Только после проверки — реальное удаление
find "$backup_location" -maxdepth 1 -type f -name "*.tar.gz" -mtime +21 -delete
Также убедитесь, что переменная $backup_location не пустая — иначе find может удалить файлы из непредвиденного места.
Ошибка 1 — uniq -c без предварительного sort
uniq считает только соседние одинаковые строки. Без sort результат будет неверным.
# НЕВЕРНО: одинаковые строки могут быть разбросаны
grep -E -r "$patterns" /var/log | uniq -c
# ВЕРНО: сначала сортируем, потом считаем
grep -E -r "$patterns" /var/log | sort | uniq -c | sort -nr
Ошибка 2 — Сравнение строки вместо числа
# НЕВЕРНО: строковое сравнение (может дать неожиданный результат)
if [ "$disk_usage" > "$threshold" ]; then
# ВЕРНО: числовое сравнение
if [ "$disk_usage" -gt "$threshold" ]; then
В bash числовые операторы: -eq (равно), -ne (не равно), -lt (меньше), -le (меньше или равно), -gt (больше), -ge (больше или равно).
Ошибка 3 — Не убран знак % при получении числа от df
# df выводит "70%" — это строка, не число
disk_usage=$(df / | awk '{print $5}')
# disk_usage = "70%" — сравнение с числом провалится
# ВЕРНО: убрать %
disk_usage=$(df / | awk '{print $5}' | sed 's/%//')
Ошибка 4 — Нет mkdir -p перед созданием архива
# НЕВЕРНО: директория может не существовать
tar -czf /backup/opt_backup_2024-01-15.tar.gz /opt
# Ошибка: /backup: No such file or directory
# ВЕРНО: создать директорию заранее
mkdir -p "$backup_location"
tar -czf "$backup_file" "$dir"
Ошибка 5 — Пустая переменная backup_location в find -delete
Если
$backup_location пустая, команда find "" -delete может начать поиск от текущей директории.
# Защита: проверка непустой переменной
if [ -z "$backup_location" ]; then
echo "ERROR: backup_location is not set"
exit 1
fi
find "$backup_location" -maxdepth 1 -type f -name "*.tar.gz" -mtime +21 -delete
Ошибка 6 — Расписание cron: день недели 7 вместо 0
# Оба варианта означают воскресенье, но 0 — более совместимый
0 2 * * 7 # работает на большинстве систем
0 2 * * 0 # стандартный вариант (0 = воскресенье)