Суббота, 18.05.2024, 08:07
Приветствую Вас, Гость
Главная » Статьи » Скрипты

Скрипт для очистки-бэкапа папки обмена на файловом сервере
Что мы имеем:
- Сервер на freeBSD с уставленной на ней Самбой
- Папку обмена имеющую структуру:
..

  User1

  User2

  User3

  .........

- Целую фирму ленивых пользователей не удаляющих за собой данные.
- Жизнь на нас наложила условия - некоторые папки не должна подвергаться никакому действию, а другие не нуждаются в резервной копии.

Как решалось:
Папка обмена находиться в /usr/home/samba
Рабочая папочка скрипта в /root/clrpub
Для работы скрипта нужны файлы EscList.txt и NoBakList.txt - список "неприкасаемых" папок и "обреченых на скорое забвение", соответственно. Кладем их в рабочую папку, хотя... в общем, ложите их куда хотите, главное уведомите об этом скрипт в 9 и 10 строчках.
Что тыкать:
# mkdir /root/clrpub
# cd /root/clrpub
# ee EscList.txt
(вписываем паки которые следует пропускать)
# ee NoBakList.txt
(вписываем папки для которых не бэкапируеться прошедшая неделя)
# ee clrPub.sh
(впихиваем туда это *стрелочка_вниз*)
Code
#!/bin/sh
## Версия 1.0
## Задача: бекапирование подпапок бекапируемой директории, механизм: move субпапка -> субпапка/bak
## Пробелы в именах папок не вызывают не правильной работы скрипта
## ВАЖНО! не производиться бэкапирование файлов непосредственно в бэкапируемой папке

## определение путей
BkDir="/usr/home/samba"            # Папка подлежащая бэкапированию
fEscList="/root/clrpub/EscList.txt"    # Список папок для которых бекапирование пропускаеться
fNBList="/root/clrpub/NoBakList.txt"    # Список папок которые очищаються без бэкапирования
tmpDir="/root/clrpub/tmp"        # Папка для временного хранения данных
fLogFile="/root/clrpub/logFile"        # Лог файл, без расширения

lgNm=$fLogFile".log"            # формирование имени лог-файла

if [ -e "$lgNm" ]            # Если есть старый лог-файл то...
then
    if [ "`tail -1 \"$lgNm\"`" != "`date +%m`" ]    # Проверка если текущий месяц не совпадает с записаным в конце файла, то...
    then
        mv "$lgNm" "$fLogFile"_old.log    # ...переместить логфайл в другой файл
    fi
fi
cd $BkDir
#clear
echo "     ***Время очистки: `date +%d/%m-%H:%M:%S`***" >> $lgNm
echo "======= текущая папка - `pwd` ========" >> $lgNm
echo " * Папка подлежащая бэкапированию (BkDir) = $BkDir" >> $lgNm
echo " * Список папок для которых бэкапирование не применяется (fEscList) = $fEscList" >> $lgNm
#echo
echo =========[*******************************]=========  >> $lgNm
echo " Содержимое файла $fEscList" >> $lgNm
echo "`cat $fEscList`" >> $lgNm
echo =================================================== >> $lgNm
echo " Содержимое файла $fNBList" >> $lgNm
echo "`cat $fNBList`" >> $lgNm
echo =========[*******************************]========= >> $lgNm

mkdir $tmpDir                # Создание папки для временного хранения данных

for fld in *                # Перебор файлов в текущей папке
do
echo " * текущая папка (fld) = $fld" >> $lgNm
#echo " операция - cat $fEscList | grep ^\"$fld\"$" >> $lgNm
#echo " результат - `cat $fEscList | grep ^\"$fld\"$`" >> $lgNm

## Проверка: если файл содержиться в $fEscList или он совпадает с служебными даннами то его пропустить.
if [ "`cat $fEscList | grep ^\"$fld$\"`" ] || [ "`pwd`/$fld" = $tmpDir ] || [ "`pwd`/$fld" = $fEscList  ]
then
echo " [ I ] Пропускаю $fld" >> $lgNm
else
## Формируються переменные с именами папки куда записывать бэкап и временные файлы
bkFld="$fld/Прошлая неделя"        # формируеться путь в который будет записываться бэкап
tmpFld="$tmpDir/$fld"

if [ -e "$bkFld" ]            # удаление резервной папки за предидущую неделю
then
  rm -r "$bkFld"
fi
## Собственно основная часть действий
if [ "`cat $fNBList | grep ^\"$fld$\"`" ]    # Если папка упомянута в $fNBList, то...
then
  echo " [ C ] Очищаю" >> $lgNm                # Пропускаем копирование во временную папку
else
  echo " [ M ] Перемещение: $fld -> $bkFld" >> $lgNm   
  cp -r "$fld" "$tmpFld"            # копирование папки Х во временную папки
fi
rm -r "$fld"                # удаление папки Х
mkdir "$fld"                # Создание папки Х
chmod a+rwx "$fld"; chown guest "$fld"; chgrp wheel "$fld";    # Установка Првельных атребутов
cp -r "$tmpFld" "$bkFld"        # копирование папки Х из временной в бэкап
chmod go-w "$bkFld"; chown root "$bkFld"    # установка разрешений "только для чтения"
ls -ld "$fld" "$bkFld" >> $lgNm
fi
echo =================================================== >> $lgNm
done
echo `date +%m` >> $lgNm    # запись в конец файла номер текущего месяца
rm -r $tmpDir            # удаление временной папки
exit 0
# chmod u+x clrPub.sh
# ee cronRun
(*стрелочка_вниз*)
Code
#!/bin/sh
## Версия 1.0
smbcmd="/usr/local/etc/rc.d/samba"
 
$smbcmd stop
if [ $# ]
then
/root/clrpub/clrPub.sh
$smbcmd start
fi

exit 0
# chmod u+x cronRun

Едва не забыл, добавляем в crontab строку:
Code
32      3      5      *      *       root      /root/clrpub/cronRun

Категория: Скрипты | Добавил: xpavlus (02.04.2009)
Просмотров: 3454 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Бесплатный конструктор сайтов - uCoz
grand theft auto: vice city неоспоримый 4