Литмир - Электронная Библиотека

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 "\n\n 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

}

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

Linux и UNIX: программирование в shell. Руководство разработчика - _5.jpg

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

97
{"b":"273485","o":1}