Главная » Статьи » Скрипты |
Скрипт для очистки-бэкапа папки обмена на файловом сервере
Что мы имеем: - Сервер на 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 # 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 Едва не забыл, добавляем в crontab строку: Code 32 3 5 * * root /root/clrpub/cronRun | |
Просмотров: 3454 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |