====== BQRunAt - функционал bq.sh для запуска внешних команд при старте/останове брокера БД ======
Версия: bq.sh ver. 4.6.2 \\
TT#: 0139423, 0291009
===== Назначение =====
Обеспечение возможности запуска настраиваемых shell-команд в привязке к событиям старта и останова брокера БД.
Предусмотрено до пяти команд в каждом из перечисленных временных отрезков:
* непосредственно перед моментом запуска брокера БД (proserve)
* после успешного запуска брокера БД
* непосредственно перед командой останова брокера базы (proshut)
* после останова базы
===== Синтаксис =====
Все управление функционалом реализуется путем установки переменных окружения (обычно в запускающем скрипте).
Предусмотрены следующие переменные:
=== Включение функционала BQRunAt ===
BQRunAtEnabled=yes # включение функционала BQRunAt
=== Управление запуском ===
BQRunAtStart{05|04|03|02|01}='команда или скрипт' # ПЕРЕД стартом
BQRunAtStart{1|2|3|4|5}='команда или скрипт' # ПОСЛЕ старта
BQRunAtStop{5|4|3|2|1}='команда или скрипт' # ПЕРЕД остановом
BQRunAtStop{01|02|03|04|05}='команда или скрипт' # ПОСЛЕ останова
=== Управление полномочиями ===
BQRunAtUUser={|.} # unix-user для выполнения всех команд BQRunAt
bis - значение по умолчанию
. - текущий пользователь (под которым выполняется bq.sh в данный момент)
BQRunAtStartUUser={|.}
# unix-user для выполнения конкретной команды BQRunAtStart
BQRunAtStopUUser={|.}
# unix-user для выполнения конкретной команды BQRunAtStop
=== Управление сообщениями ===
BQRunAtStartVerbosе={0|1|2|3} # уровень сообщений при старте
BQRunAtStopVerbosе={0|1|2|3} # уровень сообщений при останове
0 – сообщение отсутствует
1 – выводится UUser и имя соответствующей переменной (BQRunAt...)
2 - UUser, имя переменной и первое слово заданной команды
3 – UUser, имя переменной и вся команда целиком (с аргументами)
по умолчанию: 2
===== Использование =====
==== Управление запуском ====
Для включения функционала необходимо установить переменную окружения ''BQRunAtEnabled=yes''. Любое другое значение ''BQRunAtEnabled'', в т.ч. пустое или неопределенное, отключает функционал полностью.
Команды, которые необходимо привязать к событию старта брокера БД, задаются переменными вида ''BQRunAtStart''//NN//, где //NN// – числовое значение, определяющее порядок выполнения заданной команды. Аналогично, переменные ''BQRunAtStop''//NN// задают команды, привязанные к событию останова брокера БД.
Если //NN// начинается на ''0'' (цифру ноль), то соответствующая команда выполняется при остановленном брокере БД.
Если же //NN// состоит из одной цифры от ''1'' до ''5'', то данная команда будет выполняться при запущенном брокере БД. Значение //NN// определяет приоритет команды: чем оно по модулю меньше, тем ближе к событию старта/останова будет выполняться команда. То есть, команды со значениями ''01'' и ''1'' будут ближе по времени к этим событиям, чем команды ''05'' и ''5''.
Таким образом, последовательность выполнения команд будет следующая:
=== При старте: ===
''BQRunAtStart05'' \\
''BQRunAtStart04'' \\
''BQRunAtStart03'' \\
''BQRunAtStart02'' \\
''BQRunAtStart01'' \\
//<старт брокера БД>// \\
//<старт всех включенных batch-процессов>// \\
//<старт всех заданных логин-брокеров (as,ws,ns)>// \\
//<старт служебных процессов (APW,BIW,AIW,WDOG)>// \\
''BQRunAtStart1'' \\
''BQRunAtStart2'' \\
''BQRunAtStart3'' \\
''BQRunAtStart4'' \\
''BQRunAtStart5'' \\
__Важно__: блок ''BQRunAtStart//[1-5]//'' выполняется только в случае успешного старта брокера БД.
=== При останове: ===
''BQRunAtStop5'' \\
''BQRunAtStop4'' \\
''BQRunAtStop3'' \\
''BQRunAtStop2'' \\
''BQRunAtStop1'' \\
//<останов брокера БД>// \\
''BQRunAtStop01'' \\
''BQRunAtStop02'' \\
''BQRunAtStop03'' \\
''BQRunAtStop04'' \\
''BQRunAtStop05'' \\
__Важно__: Все команды ''BQRunAtStop''//NN// выполняются вне зависимости от успешности выполнения команды останова брокера БД.
Никаких пауз или ожиданий при выполнении команд BQRunAt не производится.
Команды выполняются в среде, установленной скриптом bq.sh, то есть все основные переменные определены и доступны. Также следует учитывать, что в переменную ''PATH'' к этому моменту будут добавлены каталоги ''$DLC/bin'' и ''$BQ/bin'', что позволяет во многих случаях не указывать полный путь при настройке команд BQRunAt.
При использовании подстановок shell-переменных в настойке команд BQRunAt следует учитывать, что не экранированные переменные подставляются в момент определения BQRunAt, а экранированные – в момент выполнения. Например, запись:
BQRunAtStart3=”$PROEXE $BQDB -pf $BQPF –p my-procedure.p”
не приведет к желаемому результату, т.к. переменная ''PROEXE'' определяется в самом bq.sh и на момент задания ''BQRunAtStart3'' еще не доступна. Подстановка же переменных ''BQDB'' и ''BQPF'' будет успешной, если определение ''BQRunAtStart3'' идет в запускающем скрипте __после__ определения этих переменных.
Для описанного применения следует использовать такую запись:
BQRunAtStart3=”\$PROEXE \$BQDB -pf \$BQPF –p my-procedure.p”
Или такую:
BQRunAtStart3=’$PROEXE $BQDB -pf $BQPF –p my-procedure.p’
Во втором и третьем случае все переменные указанной команды подставляются только в момент запуска ''BQRunAtStart3''.
==== Управление полномочиями ====
Функционалом предусмотрена возможность выполнения команд BQRunAt
под полномочиями заданного пользователя unix с помощью системной
команды ''su'' или аналога (определяется в bq.sh). По умолчанию все команды
BQRunAt будут запускаться из-под unix-пользователя **bis**.
В случае необходимости изменить пользователя можно установкой переменной:
BQRunAtUUser={|.} # unix-user для выполнения всех команд BQRunAt
Специальное значение ''BQRunAtUUser=.'' (точка) отключает использование ''su''. В этом случае
все команды BQRunAt будут запускаться с полномочиями текущего пользователя
(под которым выполняется bq.sh в данный момент). Будьте осторожны при использовании данного режима:
возможны конфликты с правами доступа и потенциальные уязвимости.
Установкой перечисленных ниже переменных можно задать unix-пользователя для каждой
конкретной команды ''BQRunAtStart''//NN// или ''BQRunAtStop''//NN//:
BQRunAtStartUUser={|.}
BQRunAtStopUUser={|.}
Под заданным пользователем будет выполнятся только указанная команда. Для остальных
по прежнему будет использоваться значение по умолчанию из переменной ''BQRunAtUUser''.
Здесь также специальное значение "''.''" (точка) приводит к выполнению команд
под текущим пользователем.
==== Управление сообщениями ====
Перед запуском каждой из заданных команд BQRunAt скрипт bq.sh выводит
в stdout (на терминал) информационное сообщение.
Установкой описанных ниже переменных можно управлять степенью подробности
этих сообщений. Уровень подробности задается отдельно для каждой из команд BQRunAt.
BQRunAtStartVerbosе={0|1|2|3} # уровень сообщений при старте
BQRunAtStopVerbosе={0|1|2|3} # уровень сообщений при останове
Предусмотрены следующие значения:
* ''0'' – сообщение отсутствует
* ''1'' – выводится UUser и имя соответствующей переменной (''BQRunAt''...)
* ''2'' – UUser, имя переменной и первое слово заданной команды
* ''3'' – UUser, имя переменной и вся команда целиком (с аргументами)
По умолчанию принимается значение: ''2''
===== История версий =====
v.4.6.2 //в процессе реализации// \\
[+] Добавлено управление полномочиями (переменные BQRunAtUUser, BQRunAtStart//NN//UUser, BQRunAtStop//NN//UUser)
v.4.6.1 30.08.2011 cksum: 1480063694 \\
[*] Функция BQRunAtStop: изменен порядок вызова, теперь: 5,4,3,2,1
v.4.6.0 15.12.2010 cksum: 1976088185 \\
[+] Добавлен функционал: BQRunAtStart, BQRunAtStop
{{tag>scripts doc}}