slothfk / 1c_zabbix_template_ce

Шаблон Zabbix для мониторинга кластера серверов 1С Предприятия 8.3
MIT License
155 stars 54 forks source link

[Windows] Не работает скрипт лицензий. #75

Closed axel36rus closed 2 years ago

axel36rus commented 2 years ago

Добрый день. Хочу отследить кол-во выданных лицензий. Установил все по мануалу. При выполнении команды bash -x 1c_license_server.sh info выдает следующее:

$ bash -x 1c_license_server.sh info ++ dirname 1c_license_server.sh ++ sed -r 's/\/\//g; s/^(.{1}):/\/\1/'

  • export WORK_DIR=.
  • WORK_DIR=.
  • source ./1c_common_module.sh
  • case ${1} in
  • licenses_summary ++ check_ring_license ++ [[ -z 1 ]] ++ RING_CONF=/C/ProgramData/1C/1CE/ring-commands.cfg ++ [[ ! -f /C/ProgramData/1C/1CE/ring-commands.cfg ]] +++ grep license-tools /C/ProgramData/1C/1CE/ring-commands.cfg +++ sed -r 's/.+file: //; s/\/\//g; s/^(.{1}):/\/\1/' ++ LIC_TOOL='/C/Program Files/1C/1CE/components/1c-enterprise-license-tools-0.15.0+2->x86_64/com._1c.license.activator.ring-0.15.0-2.jar' ++ [[ -z /C/Program Files/1C/1CE/components/1c-enterprise-license-tools-0.15.0+2-x86_64/com._1c.license.activator.ring->0.15.0-2.jar ]] ++ ls '/C/Program Files/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring.cmd'
  • RING_TOOL='/C/Program Files/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring.cmd'
  • export RING_TOOL
  • awk 'BEGIN { files=0; users=0 } { files+=1; users+=$1 } END { print files":"users }' ++ get_license_list '/C/Program Files/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring.cmd' ++ '/C/Program Files/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring.cmd' license list --send-statistics false ++ sed -re 's/^([0-9-]+).*/\1/'
  • execute_tasks license_info $'XXXXXXXXXXXXXXX-XXXXXXXXXXXXXXX\350\354\377' $'\364\340\351\353\340:' '"20211023082945.lic")' >$'ZZZZZZZZZZZZZZZZ-ZZZZZZZZZZZZZZZZZ\350\354\377' $'\364\340\351\353\340:' '"20211023083548.lic")' $'ZZZZZZZZZZZZZZZ->ZZZZZZZZZZZZZZZZZZ\350\354\377' $'\364\340\351\353\340:' '"20211023084145.lic")' $'ZZZZZZZZZZZZZZZZZ-ZZZZZZZZZZZZZZZZzz\350\354\377' >$'\364\340\351\353\340:' '"20211023084402.lic")' $'ZZZZZZZZZZZZZZZZZZ-ZZZZZZZZZZZZZZZZ\350\354\377' $'\364\340\351\353\340:' >'"20211023084615.lic")' $'ZZZZZZZZZZZZZZZZZZ-ZZZZZZZZZZZZZZZ\350\354\377' $'\364\340\351\353\340:' '"20211023084926.lic")'
  • [[ 19 -le 1 ]]
  • TASK_CMD=license_info
  • shift
  • export -f license_info
  • echo $'ZZZZZZZZZZ-ZZZZZZZZZZZZZ\350\354\377' $'\364\340\351\353\340:' '"20211023082945.lic")' >$'XXXXXXXXXXXXX-XXXXXXXXXXXXX\350\354\377' $'\364\340\351\353\340:' '"20211023083548.lic")' $'YYYYYYYYYYYYYYYYYY->YYYYYYYYYYYYY\350\354\377' $'\364\340\351\353\340:' '"20211023084145.lic")' $'RRRRRRRRRRRRRRRRRRR-RRRRRRRRR\350\354\377' >$'\364\340\351\353\340:' '"20211023084402.lic")' $'HHHHHHHHHHHH-HHHHHHHHHHHHHH\350\354\377' $'\364\340\351\353\340:' >'"20211023084615.lic")' $'TTTTTTTTTTTTTT-TTTTTTTTTTTTT\350\354\377' $'\364\340\351\353\340:' '"20211023084926.lic")'
  • xargs '-d ' -P2 -i bash -c 'licenseinfo ${@}' '{}' "C:\Program" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. "C:\Program" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. "C:\Program" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. "C:\Program" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. "C:\Program" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. "C:\Program" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. 0:0

Уже пересмотрел все .sh скрипты, глаза разбегаются, явно где то путь указан без ковычек, но не могу найти.

slothfk commented 2 years ago

Количество выданных выдает 1c_license_server.sh used Однако это не отменяет приведенной ошибки

axel36rus commented 2 years ago

Тут как то тоже все неоднозначно :) По нулям, но без ошибок.

$ bash -x 1c_license_server.sh used ++ dirname 1c_license_server.sh ++ sed -r 's/\/\//g; s/^(.{1}):/\/\1/'

slothfk commented 2 years ago

Тут как то тоже все неоднозначно :) По нулям, но без ошибок.

$ bash -x 1c_license_server.sh used

С какими правами запускается? Необходимы права администратора, ну или системы (т.к. по-умолчанию агент заббикс работает от имени Системы)!

RAS на центральном(ых) сервере(ах) запущен? Администратор кластера есть?

axel36rus commented 2 years ago

Прошу прощения за глупую ошибку) Запускал без админа и все было по нолям. С админом работает, но результат не утешительный. Единички. RAS запущен. Сервер лицензирования это отдельная виртуалка на которой установлена утилита RING ну и сама 1С естественно, RAS запущен на ней же, всего 3 сервера, на каждом из них стоит 1С, между собой никак не связаны, но естественно они связаны с сервером лицензирования. image image

axel36rus commented 2 years ago

Вот полный отчет команды: $ bash -x 1c_license_server.sh used ++ dirname 1c_license_server.sh ++ sed -r 's/\/\//g; s/^(.{1}):/\/\1/'

axel36rus commented 2 years ago

Такс.. С лицензиями немного разобрался. Чтобы получить количество сеансов и количество уникальных пользователей, необходимо было запускать все это дело на тех 3-х серверах на которых стоит 1С. Сейчас необходимо получить значения: количество лицензированных сеансов и количество файлов лицензий. Для этого необходимо на сервере лицензирования запустить команду 1c_license_server.sh info, с которой у меня ошибка в первом сообщении. Мне необходимо понять, перед тем как он выдает ошибку что "C:\Program" не является..... Он получил какие-то данные, затем он пытается запустить какую-то программу к которой путь указан с пробелами. Я не могу найти в скриптах, что именно он пытается запустить. Если бы Вы мне помогли, я был бы очень признателен.

slothfk commented 2 years ago

необходимо было запускать все это дело на тех 3-х серверах на которых стоит 1С

запускать "это все дело" - это речь про что? Для того чтобы скрипт сервера лицензирования работал корректно RAS должен быть запущен не на сервере лицензирования, а на центральном(ых) сервере(ах) кластера 1С!

По ошибке я понял, посмотрю чуть позже!

slothfk commented 2 years ago

Пришлите пожалуйста вывод

$ /C/Program\ Files/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring.cmd license list --send-statistics false
| sed -re 's/^([0-9-]+).*/\1/'
axel36rus commented 2 years ago

$ bash -x test.sh

slothfk commented 2 years ago

$ bash -x test.sh

зачем так? просто команду и вывод ... хм, что за квадратики после цифр?

axel36rus commented 2 years ago

Запущу я эту команду из консоли или же из файла никакой разницы не имеет. Квадратики такие показывает в консоли.

axel36rus commented 2 years ago

если выполнить только

/C/Program\ Files/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring.cmd license list --send-statistics false

$ /C/Program\ Files/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring.cmd license list --send-statistics false zzzzzzzzzzzzzzzzzz-zzzzzzzzzzzz(имя файла: "20211023082945.lic") xxxxxxxxxxxxxxxxxx-xxxxxxxxxxxx(имя файла: "20211023083548.lic") ccccccccccccccccc-cccccccccccc(имя файла: "20211023084145.lic") vvvvvvvvvvvvvvvvv-vvvvvvvvvvv(имя файла: "20211023084402.lic") qqqqqqqqqqqqqq-qqqqqqqqqq(имя файла: "20211023084615.lic") eeeeeeeeeeeeeeee-eeeeeeeeeee(имя файла: "20211023084926.lic")

slothfk commented 2 years ago

замените sed -re 's/^([0-9-]+).*/\1/' на cut -d' ' -f1 должно помочь!

axel36rus commented 2 years ago

Выглядит уже лучше :)

$ /C/Program\ Files/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring.cmd license list --send-statistics false | cut -d' ' -f1 zzzzzzzzzzzzzzzzzz-zzzzzzzzzzzz xxxxxxxxxxxxxxxxxx-xxxxxxxxxxxx ccccccccccccccccc-cccccccccccc vvvvvvvvvvvvvvvvv-vvvvvvvvvvv qqqqqqqqqqqqqq-qqqqqqqqq eeeeeeeeeeeeeeee-eeeeeeeeeee

axel36rus commented 2 years ago

При замене в 1c_license_server.sh

function license_info {

CURRENT_CODE=$( "${RING_TOOL}" license info --send-statistics false --name ${1} | \ sed -re 's/(.*0{7}10{3}1)5/\10/' | awk -F':' '/0{7}[10]0(0{3}[35]|10{3}|00[125]0|0[135]00)/ { print $2; exit}' )

[[ -n ${CURRENT_CODE} ]] && echo ${CURRENT_CODE:10}

}

на

function license_info {

CURRENT_CODE=$( "${RING_TOOL}" license info --send-statistics false --name ${1} | \ cut -d' ' -f1 | awk -F':' '/0{7}[10]0(0{3}[35]|10{3}|00[125]0|0[135]00)/ { print $2; exit}' )

[[ -n ${CURRENT_CODE} ]] && echo ${CURRENT_CODE:10}

}

Ошибка осталась прежняя

slothfk commented 2 years ago

Ошибка осталась прежняя

тогда вывод с bash -x в студию

axel36rus commented 2 years ago

$ bash -x 1c_license_server.sh info

axel36rus commented 2 years ago

Все, разобрался, в 1c_common_module.sh необходимо было поменять:

function get_license_list { "${1}" license list --send-statistics false | sed -re 's/^([0-9-]+).*/\1/' }

на

function get_license_list { "${1}" license list --send-statistics false | cut -d' ' -f1 }

1c_license_server.sh не нужно было трогать. Спасибо!

slothfk commented 2 years ago

Однако, непонятно почему sed не отрабатывает как надо :/

axel36rus commented 2 years ago

Возможно из-за кириллицы?

slothfk commented 2 years ago

да вроде на тестовой среде работало, хотя ...

axel36rus commented 2 years ago

Пользуясь случаем. Для тех кто на Windows. Файл 1c_ls_license_info.sh должен выглядеть так:

"/c/Program Files/Zabbix Agent/zabbix_sender.exe" -c "/c/Program Files/Zabbix Agent/zabbix_agentd.conf" -k >1c.ls.licenses -o "$(nice -n 19 /c/Program\ Files/Zabbix\ Agent/Scripts/1c_license_server.sh info)" > /dev/null