27.2. Сценарий backup_gen

27.2. Сценарий backup_gen

Сценарий backup_gen приводится здесь вовсе не для иллюстрации методики резервирования каталогов. Этот сценарий является удачным примером совместного использования настроек, общих для нескольких сценариев.

Сценарий backup_gen предназначен для создания резервных копий. При выполнении сценария просматривается заданный по умолчанию файл конфигурации, который затем используется для резервирования системы. При желании пользователь может изменять настройки, заданные по умолчанию. Сценарий является отличным примером того, как различные сценарии могут применять одинаковые настройки или изменять их во время выполнения сценария. После запуска сценария выполняется проверка на наличие исходного файла (backup.defaults). Если этот файл не найден, сценарий завершается.

При выполнении сценария отображается заголовок экрана и настройки, заданные по умолчанию. Пользователю направляется запрос о том, требуется ли изменять какие?либо настройки, заданные по умолчанию. Если ответ положителен, поступает запрос на ввод кода, применяемого для изменения необходимых настроек. Для ввода правильного кода пользователю предоставляются три попытки; если введен неверный код, используются настройки, заданные по умолчанию. При вводе корректного кода пользователь может изменить приведенные ниже настройки (значения, заданные по умолчанию, содержатся в квадратных скобках []):

tape device [rmt0] Можно выбрать rmt1 и rmt3 mail admin when the backup has finished [yes] Нет вариантов выбора type of backup [full] Можно выбрать опцию normal или sybase

Изменения настроек выполняются с помощью временных переменных. Для получения доступа к заданным по умолчанию настройкам установите курсор мыши в любом поле и нажмите клавишу [Return]. Однако следующие настройки изменять нельзя:

backup log filename code name.

Все внесенные изменения затем подтверждаются. После завершения процесса подтверждения значения временных переменных снова присваиваются исходным переменным. До завершения резервного копирования выполняется тестирование магнитной ленты. В процессе резервного копирования применяются команды find и cpio. С помощью этих команд используются переменные из файла настроек или значения новых переменных, указанные пользователем.

Далее приводится соответствующий сценарий.

$ pg backup_run

#!/bin/sh

#backup_run

#сценарий выполнения резервного копирования

#загрузка файла с конфигурационными параметрами

SOURCE=/appdva/bin/backup.defaults

check_source ()

{

#check_source

#файл backup.defaults содержит параметры конфигурации/функции

#проверка того, что путь содержит нужный каталог

if [ -r $SOURCE ]; then

. $SOURCE

else

echo "`basename $0`: cannot locate defaults file"

exit 1

fi

}

header () {

# header

USER=`whoami`

MYDATE=`date + %A" "%e" of "%B-%Y`

clear

cat << MAYDAY

User : $USER $MYDATE

NETWORK SYSTEM BACKUP

MAYDAY

}

change_settings () {

# change_settings

# отображение параметров, заданных по умолчанию

header

echo "Valid Entries Are…"

echo "Tape Device: rmt0, rmt1, rmt3"

echo "Mail Admin: yes, no"

echo "Backup Type: full, normal, sybase "

while :

do

echo -n -c " Tape Device To Be Used For This Backup [$_DEVICE] :"

read T_DEVICE

: ${T_DEVICE:=$_DEVICE}

case $T_DEVICE in

rmt0|rmt1|rmt3) break;;

*) echo "The devices are either… rmt0, rmt1, rmt3"

esac

done

#если пользователь нажимает клавишу ввода при установке курсора в любом

#из полей, применяются настройки, заданные по умолчанию

while :

do

echo -n "Mail Admin When Done [$INFORM] :"

read T_INFORM

: ${T_INFORM:=$_INFORM}

case $T_INFORM in

yes|Yes) break;;

no|No) break;;

*) echo "The choices are yes, no";;

esac

done

while :

do

echo -n " Backup Type [$_TYPE] :"

read T_TYPE

: ${T_TYPE:=$_TYPE}

case $T_TYPE in

Full|full) breaks;;

Normal|normal)break;;

Sybase|sybase)break;;

*) echo "The choices are either… full, normal, sybase";;

esac

done

#повторное присваивание значений временных переменных исходным переменным,

#которые были загружены

_DEVICE=$T_DEVICE;

_INFORM=$T_INFORM;

_INFORM=$T_INFORM

}

show_settings ()

# отображение текущих настроек

{

cat << MAYDAY

Default Settings Are…

Tape Device To Be Used : $_DEVICE

Mail Admin When Done : $_INFORM

Type Of Backup : $_TYPE

Log file of backup : $_LOGFILE

MAYDAY

}

get_code ()

{

#пользователи имеют 3 попытки для ввода правильного кода

#_CODE загружается из исходного файла

clear

header

_COUNTER=0

echo "YOU MUST ENTER THE CORRECT CODE TO BE ABLE TO CHANGE DEFAULT SETTINGS"

while :

do

_COUNTER=`expr $_COUNTER + 1`

echo -n "Enter the code to change the settings:"

read T_CODE

# echo $_COUNTER

if [ "$T_CODE"="$_CODE" ]; then

return 0

else

if [ "$_COUNTER" -gt 3 ]; then

echo "Sorry incorrect code entered, you cannot change the settings.." return 1

fi

fi

done

}

check_drivef() {

# перемотка ленты

mt -f /dev/$_DEVICE rewind > /dev/null 2>&1

if [ $? -ne 0 ]; then

return 1 else

return 0

fi

)

#========== main ==============

# чтение файла с параметрами

check_source

header

#отображение содержимого переменных show_settings

#уточнение у пользователя, желает ли он изменить настройки

if continue_prompt "Do you wish To Change Some Of The System Defaults" "Y"; then

# да, тогда введите имя

if get_code; then

# изменение параметров change_settings fi fi

# параметры получены, резервное копирование

if check_drive; then

echo "tape OK…."

else

echo "Cannot rewind the tape..is it in the tape drive ???"

echo "Check it out"

exit 1

fi

# что копировать

case $_TYPE in

Full|full)

BACKUP_PATH="sybase syb/support etc var bin apps use/local";;

Normal|normal)

BACKUP_PATH="etc var bin apps usr/local";;

Sybase|sybase)

BACKUP_PATH="Sybase syb/support";;

esac

# резервное копирование

cd /

echo "Now starting backup "

find $BACKUP_PATH -print | cpio -ovB -O /dev/$_DEVICE >> $_LOGFILE 2>&1

#если приведенная выше команда cpio не выполняется в системе,

#воспользуйтесь командой cpio, приведенной ниже

#find $BACKUP_PATH -print [ cpio -ovB > /dev/$_DEVICE >> $_LOGFILE 2>&1

#для получения дополнительной информации измените -ovB на -ovcC66536

if [ "$_INFORM"="yes" ]; then

echo "Backup finished check the log file" | mail admin fi

Файл backup.defaults содержит заданные по умолчанию настройки наряду с функцией continue_prompt. Ниже приводится содержимое файла.

$ pg backup.defaults

#!/bin/sh

#backup.defaults

#файл конфигурации, заданный по умолчанию, для сетевых резервных копий

#редактируете его на свой страх и риск!!

#

_CODE="comet"

_LOGFILE="/appdva/backup/log.`date +%y%m%d`"

_DEVICE="rmt0"

_INFORM="yes"

_TYPE="Full"

continue_prompt ()

#continue_prompt

#для вызова: continue_prompt "отображаемая строка"

default_answer ()

{

_STR=$1

_DEFAULT=$2

# проверка ввода корректных параметров

if [ $# -lt 1 ]; then

echo "continue_prompt: I need a string to display"

return 1

fi

while : do

echo -n "$_STR [Y.. N] [$_DEFAULT]:"

read _ANS

: ${_ANS:=$_DEFAULT]

if [ "$_ANS" = "" ]; then

case $_ANS in

Y) return 0 ;;

N) return 1 ;;

esac

fi # пользователь сделал выбор

case $_ANS in

y|Y|Yes|YES) return 0;;

n|N|No|NO) return 1;;

*) echo "Answer either Y or N, default is $_DEFAULT";;

esac

echo $_ANS

done

}

Ниже приводится поток вывода при отображении настроек, заданных по умолчанию, причем пользователя запрашивают, желает ли он изменить эти настройки:

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

Tape Device: rmt0, rmt1, rmt3

Mail Admin: yes, no

Backup Type: full, normal, Sybase

Tape Device To Be Used For This Backup [rmt0]:

Mail Admin When Done [yes]:

Backup Type [Full]: Normal

Cannot rewind the tape..is it in the tape drive ???

Check it out