Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
unix:doc:bin:bq-runat [2016/10/27 23:33]
kos [BQRunAt - функционал bq.sh для запуска внешних команд при старте/останове брокера БД]
unix:doc:bin:bq-runat [2016/11/17 20:34] (текущий)
kos [BQRunAt - функционал bq.sh для запуска внешних команд при старте/останове брокера БД]
Строка 1: Строка 1:
 ====== BQRunAt - функционал bq.sh для запуска внешних команд при старте/​останове брокера БД ====== ====== BQRunAt - функционал bq.sh для запуска внешних команд при старте/​останове брокера БД ======
  
-Версия:​ bq.sh ver. 4.6.2 +Версия:​ bq.sh ver. 4.6.2 \\ 
-TT#: 0139423+TT#: 0139423, 0291009
  
 ===== Назначение ===== ===== Назначение =====
  
 Обеспечение возможности запуска настраиваемых shell-команд в привязке к событиям старта и останова брокера БД. Обеспечение возможности запуска настраиваемых shell-команд в привязке к событиям старта и останова брокера БД.
-Предусмотрено до пяти командвыполняющихся непосредственно перед моментом запуска брокера, столько же после успешного запуска ​и такое же количество команд, выполняющихся до и после останова брокера.+Предусмотрено до пяти команд в каждом из перечисленных временных отрезков:​ 
 +  * непосредственно перед моментом запуска брокера ​БД (proserve) 
 +  * после успешного запуска ​брокера БД 
 +  * непосредственно перед ​командой останова брокера базы (proshut) 
 +  * после останова базы
  
 ===== Синтаксис =====  ===== Синтаксис ===== 
Строка 14: Строка 18:
 Предусмотрены следующие переменные:​ Предусмотрены следующие переменные:​
  
-==== Включение функционала BQRunAt ​====+=== Включение функционала BQRunAt ===
 <code bash> <code bash>
  
-    ​BQRunAtEnabled=yes ​  # включение функционала BQRunAt+  ​BQRunAtEnabled=yes ​  # включение функционала BQRunAt
  
 </​code>​ </​code>​
  
-==== Управление запуском ​==== +=== Управление запуском ===
  
 <code bash> <code bash>
  
-  BQRunAtStart{05,04,03,02,01}=<команда/скрипт ​shell>   # ПЕРЕД стартом +  BQRunAtStart{05|04|03|02|01}='команда ​или ​скрипт'   # ПЕРЕД стартом 
-  BQRunAtStart{1,2,3,4,5}=<команда/скрипт ​shell>​  ​      # ПОСЛЕ старта+  BQRunAtStart{1|2|3|4|5}='команда ​или ​скрипт'​  ​         ​# ПОСЛЕ старта
  
-  BQRunAtStop{5,4,3,2,1}=<команда/скрипт ​shell>​  ​      # ПЕРЕД остановом +  BQRunAtStop{5|4|3|2|1}='команда ​или ​скрипт'​  ​         ​# ПЕРЕД остановом 
-  BQRunAtStop{01,02,03,04,05}=<команда/скрипт ​shell>   # ПОСЛЕ останова+  BQRunAtStop{01|02|03|04|05}='команда ​или ​скрипт'   # ПОСЛЕ останова
  
 </​code>​ </​code>​
  
-==== Управление полномочиями ====+=== Управление полномочиями === 
 <code bash> <code bash>
  
-  BQRunAtUUser={<​unix-user>​,.} # unix-user для выполнения всех команд BQRunAt +  BQRunAtUUser={<​unix-user>​|.}        # unix-user для выполнения всех команд BQRunAt 
-     «bis»  ​- значение по умолчанию +       bis - значение по умолчанию 
-     «.»    ​- текущий пользователь (под которым выполняется bq.sh в данный момент)+       ​  ​- текущий пользователь (под которым выполняется bq.sh в данный момент) 
 + 
 +  BQRunAtStart<​NN>​UUser={<​unix-user>​|.} 
 +     # unix-user для выполнения конкретной команды BQRunAtStart<​NN>​
  
-  ​BQRunAt{Start|Stop}<​NN>​UUser={<​unix-user>​,.} +  ​BQRunAtStop<​NN>​UUser={<​unix-user>​|.} 
-      # unix-user для выполнения конкретной команды ​BQRunAt{Start|Stop}<​<NN>+     ​# unix-user для выполнения конкретной команды ​BQRunAtStop<NN>
  
 </​code>​ </​code>​
  
-==== Управление сообщениями ====+=== Управление сообщениями === 
 <code bash> <code bash>
  
-BQRunAt{Start|Stop}<​NN>​Verbosе={0,1,2,3}        # уровень сообщений + ​BQRunAtStart<​NN>​Verbosе={0|1|2|3      # уровень сообщений при старте 
-   ​0 – сообщение отсутствует + ​BQRunAtStop<​NN>​Verbosе={0|1|2|3}        # уровень сообщений ​при останове 
-   ​1 – выводится UUser и имя соответствующей переменной (BQRunAt+    0 – сообщение отсутствует 
- - UUser, имя переменной и первое слово заданной команды +    1 – выводится UUser и имя соответствующей переменной (BQRunAt...
-      3 – UUser, имя переменной и вся команда целиком (с аргументами) +    2 - UUser, имя переменной и первое слово заданной команды 
-      по умолчанию:​ 2+    3 – UUser, имя переменной и вся команда целиком (с аргументами) 
 +    по умолчанию:​ 2
  
 </​code>​ </​code>​
Строка 59: Строка 69:
 ===== Использование ===== ===== Использование =====
  
-Для ​включения функционала необходимо установить переменную окружения BQRunAtEnabled=yes. Любое другое значение BQRunAtEnabled,​ в т.ч. ​пустое или неопределенное,​ отключает функционал.+==== Управление запуском ====
  
-Команды,​ которые необходимо привязать к событию старта брокера БД, задаются переменными вида ​BQRunAtStartNN, где NN – числовое значение,​ определяющее порядок выполнения ​ заданной команды. Аналогично,​ переменные ​BQRunAtStopNN ​задают команды,​ привязанные к событию останова брокера БД. +Для включения функционала необходимо установить переменную окружения ''​BQRunAtEnabled=yes''​. Любое другое значение ''​BQRunAtEnabled'',​ в т.ч. пустое или неопределенное,​ отключает функционал полностью. 
-Если NN начинается на 0, то соответствующая команда выполняется при остановленном брокере БД. + 
-Если NN состоит из одной цифры от 1 до 5, то данная команда будет выполняться при запущенном брокере БД. Значение NN определяет приоритет команды:​ чем оно по модулю меньше,​ тем ближе к событию старта/​останова будет выполняться команда. Т.е., команды со значениями 01 и 1 будут ближе по времени к этим событиям,​ чем команды 05 и 5.+Команды,​ которые необходимо привязать к событию старта брокера БД, задаются переменными вида ​''​BQRunAtStart''//​NN//​, где ​//NN// – числовое значение,​ определяющее порядок выполнения ​ заданной команды. Аналогично,​ переменные ​''​BQRunAtStop''//​NN// ​задают команды,​ привязанные к событию останова брокера БД. 
 +Если ​//NN// начинается на ''​0''​ (цифру ноль), то соответствующая команда выполняется при остановленном брокере БД. 
 +Если ​же //NN// состоит из одной цифры от ''​1'' ​до ''​5''​, то данная команда будет выполняться при запущенном брокере БД. Значение ​//NN// определяет приоритет команды:​ чем оно по модулю меньше,​ тем ближе к событию старта/​останова будет выполняться команда. То есть, команды со значениями ​''​01'' ​и ''​1'' ​будут ближе по времени к этим событиям,​ чем команды ​''​05'' ​и ''​5''​.
  
 Таким образом,​ последовательность выполнения команд будет следующая:​ Таким образом,​ последовательность выполнения команд будет следующая:​
Строка 69: Строка 81:
 === При старте:​ === === При старте:​ ===
  
-<code>+''​BQRunAtStart05''​ \\ 
 +''​BQRunAtStart04''​ \\ 
 +''​BQRunAtStart03''​ \\ 
 +''​BQRunAtStart02''​ \\ 
 +''​BQRunAtStart01''​ \\ 
 +//<старт брокера БД>// \\ 
 +//<​старт всех включенных batch-процессов>//​ \\ 
 +//<​старт всех заданных логин-брокеров (as,​ws,​ns)>//​ \\ 
 +//<​старт служебных процессов (APW,​BIW,​AIW,​WDOG)>//​ \\ 
 +''​BQRunAtStart1''​ \\ 
 +''​BQRunAtStart2''​ \\ 
 +''​BQRunAtStart3''​ \\ 
 +''​BQRunAtStart4''​ \\ 
 +''​BQRunAtStart5''​ \\
  
-BQRunAtStart05 +__Важно__:​ блок ​''​BQRunAtStart//[1-5]//'' ​выполняется только в случае успешного старта брокера БД.
-BQRunAtStart04 +
-BQRunAtStart03 +
-BQRunAtStart02 +
-BQRunAtStart01 +
-<​старт брокера БД> +
-<​старт всех включенных batch-процессов>​ +
-<​старт всех заданных логин-брокеров (as,​ws,​ns)>​ +
-<​старт служебных процессов (APW,​BIW,​AIW,​WDOG)>​ +
-BQRunAtStart1 +
-BQRunAtStart2 +
-BQRunAtStart3 +
-BQRunAtStart4 +
-BQRunAtStart5 +
- +
-</​code>​ +
- +
-__Важно__:​ блок BQRunAtStart[1-5] выполняется только в случае успешного старта брокера БД.+
  
 === При останове:​ === === При останове:​ ===
  
-<​code>​ +''​BQRunAtStop5''​ \\ 
-BQRunAtStop5 +''​BQRunAtStop4''​ \\ 
-BQRunAtStop4 +''​BQRunAtStop3''​ \\ 
-BQRunAtStop3 +''​BQRunAtStop2''​ \\ 
-BQRunAtStop2 +''​BQRunAtStop1''​ \\ 
-BQRunAtStop1 +//<​останов брокера БД>// \\ 
-<​останов брокера БД> +''​BQRunAtStop01''​ \\ 
-BQRunAtStop01 +''​BQRunAtStop02''​ \\ 
-BQRunAtStop02 +''​BQRunAtStop03''​ \\ 
-BQRunAtStop03 +''​BQRunAtStop04''​ \\ 
-BQRunAtStop04 +''​BQRunAtStop05''​ \\
-BQRunAtStop05 +
-</​code>​+
  
-__Важно__:​ Все команды ​BQRunAtStopNN ​выполняются вне зависимости от успешности выполнения команды останова брокера БД. +__Важно__:​ Все команды ​''​BQRunAtStop''//​NN// ​выполняются вне зависимости от успешности выполнения команды останова брокера БД. 
  
 Никаких пауз или ожиданий при выполнении команд BQRunAt не производится. Никаких пауз или ожиданий при выполнении команд BQRunAt не производится.
-Команды выполняются в среде, установленной скриптом bq.sh, то есть все основные переменные определены и доступны. Также следует учитывать,​ что в PATH к этому моменту будут добавлены каталоги $DLC/bin и $BQ/bin, что позволяет во многих случаях не указывать полный путь при настройке команд BQRunAt.+Команды выполняются в среде, установленной скриптом bq.sh, то есть все основные переменные определены и доступны. Также следует учитывать,​ что в переменную ''​PATH'' ​к этому моменту будут добавлены каталоги ​''​$DLC/bin'' ​и ''​$BQ/bin''​, что позволяет во многих случаях не указывать полный путь при настройке команд BQRunAt.
  
-При использовании подстановок shell-переменных в настойке команд BQRunAt следует учитывать,​ что неэкранированные переменные подставляются в момент определения BQRunAt, а экранированные – в момент выполнения. Например,​ запись:​+При использовании подстановок shell-переменных в настойке команд BQRunAt следует учитывать,​ что не экранированные переменные подставляются в момент определения BQRunAt, а экранированные – в момент выполнения. Например,​ запись:​
 <code bash> <code bash>
  
Строка 118: Строка 124:
 </​code>​ </​code>​
  
-не приведет к желаемому результату,​ т.к. переменная PROEXE определяется в самом bq.sh и на момент задания BQRunAtStart3 еще не доступна. Подстановка же переменных BQDB и BQPF будет успешной,​ если определение BQRunAtStart3 идет в запускающем скрипте __после__ определения этих переменных.+не приведет к желаемому результату,​ т.к. переменная ​''​PROEXE'' ​определяется в самом bq.sh и на момент задания ​''​BQRunAtStart3'' ​еще не доступна. Подстановка же переменных ​''​BQDB'' ​и ''​BQPF'' ​будет успешной,​ если определение ​''​BQRunAtStart3'' ​идет в запускающем скрипте __после__ определения этих переменных.
 Для описанного применения следует использовать такую запись:​ Для описанного применения следует использовать такую запись:​
 <code bash> <code bash>
  
-  BQRunAtStart3=”\$PROEXE $BQDB -pf $BQPF –p my-procedure.p”+  BQRunAtStart3=”\$PROEXE ​\$BQDB -pf \$BQPF –p my-procedure.p”
 </​code>​ </​code>​
  
Строка 132: Строка 138:
 </​code>​ </​code>​
  
-Во втором и третьем случае все переменные указанной команды подставляются только в момент запуска BQRunAtStart3.+Во втором и третьем случае все переменные указанной команды подставляются только в момент запуска ​''​BQRunAtStart3''​. 
 + 
 +==== Управление полномочиями ==== 
 + 
 +Функционалом предусмотрена возможность выполнения команд BQRunAt  
 +под полномочиями заданного пользователя unix с помощью системной  
 +команды ''​su''​ или аналога (определяется в bq.sh). По умолчанию все команды  
 +BQRunAt будут запускаться из-под unix-пользователя **bis**. 
 + 
 +В случае необходимости изменить пользователя можно установкой переменной:​ 
 +<code bash> 
 + 
 +  BQRunAtUUser={<​unix-user>​|.} ​       # unix-user для выполнения всех команд BQRunAt 
 +   
 +</​code>​ 
 +Специальное значение ''​BQRunAtUUser=.''​ (точка) отключает использование ''​su''​. В этом случае 
 +все команды BQRunAt будут запускаться с полномочиями текущего пользователя  
 +(под которым выполняется bq.sh в данный момент). Будьте осторожны при использовании данного режима:​  
 +возможны конфликты с правами доступа и потенциальные уязвимости. 
 + 
 +Установкой перечисленных ниже переменных можно задать unix-пользователя для каждой 
 +конкретной команды ''​BQRunAtStart''//​NN//​ или ''​BQRunAtStop''//​NN//:​ 
 +<code bash> 
 + 
 +  BQRunAtStart<​NN>​UUser={<​unix-user>​|.} 
 +  BQRunAtStop<​NN>​UUser={<​unix-user>​|.} 
 + 
 +</​code>​ 
 +Под заданным пользователем будет выполнятся только указанная команда. Для остальных  
 +по прежнему будет использоваться значение по умолчанию из переменной ''​BQRunAtUUser''​. 
 +Здесь также специальное значение "''​.''"​ (точка) приводит к выполнению команд 
 + ​под текущим пользователем. 
 + 
 +==== Управление сообщениями ==== 
 + 
 +Перед запуском каждой из заданных команд BQRunAt скрипт bq.sh выводит  
 +в stdout (на терминал) информационное сообщение. 
 +Установкой описанных ниже переменных можно управлять степенью подробности 
 +этих сообщений. Уровень подробности задается отдельно для каждой из команд BQRunAt. 
 +<code bash> 
 + 
 + ​BQRunAtStart<​NN>​Verbosе={0|1|2|3} ​      # уровень сообщений при старте 
 + ​BQRunAtStop<​NN>​Verbosе={0|1|2|3} ​       # уровень сообщений при останове 
 + 
 +</​code>​ 
 +Предусмотрены следующие значения:​ 
 + 
 +  *  ''​0''​ – сообщение отсутствует 
 +  *  ''​1''​ – выводится UUser и имя соответствующей переменной (''​BQRunAt''​...) 
 +  *  ''​2''​ – UUser, имя переменной и первое слово заданной команды 
 +  *  ''​3''​ – UUser, имя переменной и вся команда целиком (с аргументами) 
 + 
 +По умолчанию принимается значение:​ ''​2''​ 
 + 
 +===== История версий ===== 
 + 
 +v.4.6.2 ​ //в процессе реализации//​ \\ 
 +[+] Добавлено управление полномочиями (переменные BQRunAtUUser,​ BQRunAtStart//​NN//​UUser,​ BQRunAtStop//​NN//​UUser)
  
-==== Использование:​ управление полномочиями ==== 
  
-Все ​команды выполняются с полномочиями, определяемыми переменной BQRunAtUUser,​ в которой указывается имя unix-пользователя.+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}}