Пример A-24. Резервное копирование файлов журналов

Пример A-24. Резервное копирование файлов журналов

  1. #!/bin/bash
  2. # archiveweblogs.sh v1.0
  3. # Troy Engel <tengel@fluid.com>
  4. # С небольшими изменениями, внесенными автором документа.
  5. # Используется с разрешения автора.
  6. #
  7. #  Этот сценарий выполняет резервное копирование
  8. #+ файлов журналов из стандартного каталога установки RedHat/Apache.
  9. #  Вставляет дату создания копии в имя файла-архива,
  10. #+ сжимает (bzip), и помещает сжатые файлы в заданный каталог.
  11. #
  12. #  Запускается из crontab ночью в 0 часов,
  13. #+ так как bzip2 потребляет значительную часть ресурсов процессора,
  14. #+ если журналы достаточно велики:
  15. #  0 2 * * * /opt/sbin/archiveweblogs.sh
  16. PROBLEM=66
  17. # Здесь укажите ваш каталог для архивации.
  18. BKP_DIR=/opt/backups/weblogs
  19. # Настройки Apache/RedHat по-умолчанию
  20. LOG_DAYS="4 3 2 1"
  21. LOG_DIR=/var/log/httpd
  22. LOG_FILES="access_log error_log"
  23. # Расположение программ в RedHat по-умолчанию
  24. LS=/bin/ls
  25. MV=/bin/mv
  26. ID=/usr/bin/id
  27. CUT=/bin/cut
  28. COL=/usr/bin/column
  29. BZ2=/usr/bin/bzip2
  30. # Проверка прав пользователя?
  31. USER=`$ID -u`
  32. if [ "X$USER" != "X0" ]; then
  33.   echo "PANIC: Только root может запускать этот сценарий!"
  34.   exit $PROBLEM
  35. fi
  36. # Каталог для резервной копии существует и доступен на запись?
  37. if [ ! -x $BKP_DIR ]; then
  38.   echo "PANIC: Каталог $BKP_DIR не найден или не доступен для записи!"
  39.   exit $PROBLEM
  40. fi
  41. # Переместить, переименовать и сжать
  42. for logday in $LOG_DAYS; do
  43.   for logfile in $LOG_FILES; do
  44.     MYFILE="$LOG_DIR/$logfile.$logday"
  45.     if [ -w $MYFILE ]; then
  46.       DTS=`$LS -lgo --time-style=+%Y%m%d $MYFILE | $COL -t | $CUT -d ' ' -f7`
  47.       $MV $MYFILE $BKP_DIR/$logfile.$DTS
  48.       $BZ2 $BKP_DIR/$logfile.$DTS
  49.     else
  50.       # Выдать сообщение об ошибке, если файл недоступен на запись.
  51.       if [ -f $MYFILE ]; then
  52.         echo "ERROR: $MYFILE not writable. Skipping."
  53.       fi
  54.     fi
  55.   done
  56. done
  57. exit 0