powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / bash: обработка ошибок и зависаний
3 сообщений из 3, страница 1 из 1
bash: обработка ошибок и зависаний
    #38387218
крендель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
задача: 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
bash: обработка ошибок и зависаний
    #38387361
scrip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ограничить время выполнения шелл-скрипта конечно можно (в некоторых линуксах есть команда 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
bash: обработка ошибок и зависаний
    #38387503
крендель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scrip, спасибо, воспользовался Вашими советами
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / bash: обработка ошибок и зависаний
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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