Здравствуйте, у кого то есть рабочий скрипт с изменением имени хоста в базе данных mysql или в любой другой базе данных?
Ad Widget
Collapse
Скрипт автоприсвоении имени
Collapse
X
-
Сеть 10.0/16 по этому обнаруженые через LLD узлы имеют ip 10.0.*.
Пользую этот (скрипт запрашивает по SNMP имя узла и обновляет базу):
Code:#!/bin/bash MYSQL="mysql --connect_timeout 10 zabbix -h 127.0.0.1 -u root --password=123123123 --skip-column-names -B -e" $MYSQL "SELECT host FROM hosts where name like '10.0.%'" | while read line do arr=($line) x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk -F'"' '{print$2}'` echo $x [[ -n $x ]] && $MYSQL "UPDATE hosts SET name = '$x' WHERE host ='${arr[0]}'" done -
Ты его с командной строки запускаешь или добавляешь в скрипты zabbix'а ?Сеть 10.0/16 по этому обнаруженые через LLD узлы имеют ip 10.0.*.
Пользую этот (скрипт запрашивает по SNMP имя узла и обновляет базу):
Code:#!/bin/bash MYSQL="mysql --connect_timeout 10 zabbix -h 127.0.0.1 -u root --password=123123123 --skip-column-names -B -e" $MYSQL "SELECT host FROM hosts where name like '10.0.%'" | while read line do arr=($line) x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk -F'"' '{print$2}'` echo $x [[ -n $x ]] && $MYSQL "UPDATE hosts SET name = '$x' WHERE host ='${arr[0]}'" done
При запуске это скрипта он мне выводит пустые строки и ничего в базе данных не заменяетLast edited by alexeq2; 09-09-2015, 15:03.Comment
-
Из ком.строки.
Community на свое сменил? sysName у коммутаторов заданы?
покажи что выводит (подставь свои IP и комьюнити)
snmpget -Ou -Oq -v2c -c public 10.0.0.1 .1.3.6.1.2.1.1.5.0Comment
-
ввел
snmpget -Ou -Oq -v2c -c public 192.168.0.234 .1.3.6.1.2.1.1.5.0
выдало корректно
system.sysname.0 Stack7
я думаю проблема с самим скриптом, так как при команде echo $x должен выдавать построчно имена хостов, которые он нашел, но выдает пустые строкиComment
-
Да, со скриптом. у меня snmpget Отдает в кавычках, по этому я режу по кавычкам.
Поправьте в скрипте строку:
x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'`Comment
-
Ввел команду в строку
snmpget -Ou -Oq -v2c -c public 192.168.0.235 .1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'
и выдал корректный ответ
Так что копать надо дальше, вариантов у меня нету в чем конкретно проблемаComment
-
Так я вам дал решение ))) замените в скрипте строку
на строкуCode:x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk -F'"' '{print$2}'`
и у вас все сработает.Code:x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'`Comment
-
Я пробовал такой вариант, предложенный тобой, и скрипт не сработал, выдаёт пустые строки.Так я вам дал решение ))) замените в скрипте строку
на строкуCode:x=`snmpget -ou -oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk -f'"' '{print$2}'`
и у вас все сработает.Code:x=`snmpget -ou -oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'`Last edited by alexeq2; 10-09-2015, 18:59.Comment
-
Противоречащие друг другу выражения
Проверьте что скрипт выглядит так:
Code:#!/bin/bash MYSQL="mysql --connect_timeout 10 zabbix -h 127.0.0.1 -u root --password=123123123 --skip-column-names -B -e" $MYSQL "SELECT host FROM hosts where name like '10.0.%'" | while read line do arr=($line) x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'` echo $x [[ -n $x ]] && $MYSQL "UPDATE hosts SET name = '$x' WHERE host ='${arr[0]}'" doneComment
-
Видимо товарищу нужно что-то делать с конструкцией name like '10.0.%'" в sql запросе.
Например заменить на name like '192.168.0.%'"
Как минимум один хост из этой сети есть в наличии - 192.168.0.235Comment
-
Противоречащие друг другу выражения
Проверьте что скрипт выглядит так:
Code:#!/bin/bash MYSQL="mysql --connect_timeout 10 zabbix -h 127.0.0.1 -u root --password=123123123 --skip-column-names -B -e" $MYSQL "SELECT host FROM hosts where name like '10.0.%'" | while read line do arr=($line) x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} .1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'` echo $x [[ -n $x ]] && $MYSQL "UPDATE hosts SET name = '$x' WHERE host ='${arr[0]}'" done
Скидываю свой скрипт , который не работает
Он мне выдает пустые строки в ответеCode:#!/bin/bash MYSQL="mysql --connect_timeout 10 zabbix -h 127.0.0.1 -u root --password= 12345678 --skip-column-names -B -e" $MYSQL "SELECT host FROM hosts where name like '192.168.0.%'" | while read line do arr=($line) x=`snmpget -Ou -Oq -v2c -c public ${arr[0]} 1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}'` echo $x [[ -n $x ]] && $MYSQL "UPDATE hosts SET name ='$x' WHERE host ='${arr[0]}'" done
Но если отдельно вбивать команду на mysql
SELECT host FROM hosts where name like '192.168.0.%;
То он выдает список хостов с таким ip
Если в терминале вписать запрос sysname конкретного хоста
snmpget -Ou -Oq -v2c -c public 192.168.0.237 1.3.6.1.2.1.1.5.0 2
выдает корректный ответLast edited by alexeq2; 11-09-2015, 08:05.Comment
-
Да интересно.
Пишу в базу много, тк способ этот лучше знаю.
Через базу включают инвентори после lld, там же переименовываю и добавляю ссылку telnet://$ip в url_a
Если научните через апи делать это - буду благодарен.Comment
Comment