Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / bash: обработка ошибок и зависаний / 3 сообщений из 3, страница 1 из 1
04.09.2013, 20:53
    #38387218
крендель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash: обработка ошибок и зависаний
задача: bash скрипт экспорта данных oracle (см ниже), архивация, запись в mount папку. Скрипт ставиться в cron job, запускается в ночное время. Возник вопрос: как обработать разного рода ошибки, которые могут возникать в процессе выполнения и послать mail уведомление, например:
1. база недоступна на момент выполнения скрипта
2. закончилось место на монтированной папке или она недоступна
3. я ошибся с именем пользователя и паролем и imp находится в состоянии запроса username и password, скрипт остановился в данном месте и для cron-а как бы завис. Тут, как мне кажется, нужен таймаут на выполнение данного скрипта в целом или его команды.
Как в bash-е обработать подобного рода ситуации?
Спасибо.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
#!/bin/bash

# example
#./backup.sh orcl scott myshema1 myshema2

if [ -z "$1" ]; then
	echo "Usage: ${0} [service_name] [shemas]"
	exit 0 
fi

BACKUP_DIR="mnt/backup/"
BACKUP_DATE=`date "+%Y-%m-%d"`

count=0
shema=""
for i in "$@"
do
	(( count += 1 ))
	if [ $count -eq 1 ]; then
		continue
	fi
	export EXP_COMMAND="userid=${i}/${i}@${1} grants=yes file=/tmp/${1}_${i}.dmp log=/tmp/${1}_${i}.log consistent=y owner=${i}"
	su - oracle-c "exp '$EXP_COMMAND'"
	zip -m /tmp/${1}_${i}_${BACKUP_DATE}.zip /tmp/${1}_${i}.*
	mv /tmp/${1}_${i}_${BACKUP_DATE}.zip /mnt/backup/
	shema="$shema$i "
done
shema=$(echo ${shema} | sed 's/ *$//g')
mail -s "backup database $1" my-email@example.ru <<< "shema: ${shema}"
...
Рейтинг: 0 / 0
05.09.2013, 07:14
    #38387361
scrip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash: обработка ошибок и зависаний
Ограничить время выполнения шелл-скрипта конечно можно (в некоторых линуксах есть команда timeout, в прочих см ), но в данном случае не стоит IMHO.

1. При недоступной базе exp отвалится сам
2. При закончившемся на диске месте exp (вроде бы) отвалится сам
3. Чтобы exp не ждал ввод пароля нужно перекрыть крантик на STDIN:
Код: powershell
1.
imp userid=... </dev/null

или
Код: powershell
1.
echo | imp userid=...


4. Линуксовый крон сам шлёт письмо, если скрипт выдал хоть что-то на STDOUT/STDERR.
Код: powershell
1.
man cron



P.S. первый аргумент командной строки можно убрать из $@ командой shift
...
Рейтинг: 0 / 0
05.09.2013, 10:25
    #38387503
крендель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash: обработка ошибок и зависаний
scrip, спасибо, воспользовался Вашими советами
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / bash: обработка ошибок и зависаний / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]