Логирование – важная часть любого скрипта, особенно скриптов, которые выполняют операции, потенциально приводящие к потере данных, такие как очистка файлов. Логирование позволяет отслеживать работу скрипта, выявлять ошибки и восстанавливать данные, если что-то пойдет не так.

Базовый скрипт очистки файлов (без логирования)

Для примера, предположим, что у нас есть следующий скрипт очистки файлов:

#!/bin/bash
  
  DIRECTORY="/path/to/directory"
  PATTERN="*.txt"
  
  find "$DIRECTORY" -name "$PATTERN" -delete
  
  echo "Скрипт очистки завершен"
  
  

Добавление логирования

Для добавления логирования необходимо перенаправить стандартный вывод и стандартный поток ошибок в лог-файл. Также можно использовать команды `echo` или `logger` для записи конкретных сообщений в лог-файл.

Пример скрипта с логированием

#!/bin/bash

  DIRECTORY="/path/to/directory"
  PATTERN="*.txt"
  LOG_FILE="/path/to/logfile.log" # Путь к лог-файлу

  # Функция для записи в лог-файл
  log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
  }

  log "Скрипт очистки файлов запущен."

  find "$DIRECTORY" -name "$PATTERN" -print0 | while IFS= read -r -d $'\0' file; do
    log "Удаление файла: $file"
    rm -f "$file"
  done

  log "Скрипт очистки файлов завершен."
  

Объяснение кода:

  • `LOG_FILE="/path/to/logfile.log"`: Указывает путь к лог-файлу. Замените на фактический путь.
  • `log() { ... }`: Определяет функцию `log`, которая записывает сообщения в лог-файл с меткой времени.
  • `find "$DIRECTORY" -name "$PATTERN" -print0 | while IFS= read -r -d $'\0' file; do ... done`: Использует цикл `while` для обработки каждого файла, найденного командой `find`. Использование `-print0` и `IFS= read -r -d $'\0'` безопасно обрабатывает файлы с пробелами в именах.
  • `log "Удаление файла: $file"`: Записывает сообщение в лог-файл перед удалением каждого файла.
  • `rm -f "$file"`: Удаляет файл.
  • `log "Скрипт очистки файлов завершен."`: Записывает сообщение о завершении скрипта в лог-файл.

Продвинутое логирование

Можно добавить более продвинутое логирование, например:

  • Захват стандартного потока ошибок (`stderr`) и запись его в лог-файл.
  • Использование уровней логирования (например, DEBUG, INFO, WARNING, ERROR) для фильтрации сообщений.
  • Отправка уведомлений по электронной почте при возникновении ошибок.

Заключение

Логирование — важный аспект обслуживания и отладки скриптов очистки файлов. Регулярная проверка логов помогает быстро выявлять и устранять проблемы, а также обеспечивает возможность восстановления данных в случае необходимости.