Ad Widget
Collapse
Мониторинг размера базы данных MySQL
Collapse
X
-
-
Ну блин, тянуть все из тебя по капле, нам оно что ли надо?
Вставь теперь tee после mysql и посмотри в файле что на выходе, есть ли левые символы, пробелы и тп. Если число с плавающей запятой, то там должна быть точка (man locale), и тип ЭД должен быть вещественный.
Короче больше информации.Comment
-
Tee после mysql выдает 279761214. Т.е. правильно число, которое должен увидеть zabbix.Ну блин, тянуть все из тебя по капле, нам оно что ли надо?
Вставь теперь tee после mysql и посмотри в файле что на выходе, есть ли левые символы, пробелы и тп. Если число с плавающей запятой, то там должна быть точка (man locale), и тип ЭД должен быть вещественный.
Короче больше информации.
Получается, что ошибки not found и permission denied вылетают где-то в этом выражении: "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema='$1'")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name='$2'");"Comment
-
Comment
-
Спасибо, но я знаю, как менять шелл для пользователя
Я уже писал выше, что замена шелла для zabbix не влияет на результат.
Comment
-
хз, я бы, например, конструкции вида "a" = "b" || ! "a" не использовал, во первых в подобных местах нагляднее просто позвать test, во вторых использовать его ключи а не ||
test "$a" = "$b" -o -z "$a"
ну и с case еще сомнения, я без понятия как он в разных шелах себя ведет и где надо ставить точку с запятой при написании case в одну строку
P.S. шелл для пользователя тут вообще никаким боком, кто вооще сказал что system() будет смотреть какой там шелл у EUID? ну т.е. я не знаю ответа на этот вопрос, но для начала надо явно гуглить не то как сделать через жопу `vi /etc/passwd` в линуксах, а то грести от man 3 system и дальшеLast edited by Jimson; 07-07-2015, 16:57.Comment
-
Comment
-
Нда, ситуация интересная:
1.Code:UserParameter=test,/home/zabbix/test2.sh
Code:#!/bin/bash set a='123' [[ "$a" = "all" || ! "$a" ]] || echo "234"
2.Code:keeper:~$ zabbix_agentd -t "test" test [t|BASH=/bin/bash ... PWD=/home/zabbix SHELL=/bin/bash _=/usr/local/sbin/zabbix_agentd 234]
Code:set a='123' [[ "$a" = "all" || ! "$a" ]] || echo "234"
Code:keeper:~$zabbix_agentd -t "test" test [t|.... PWD='/home/zabbix' SHELL='/bin/bash' _='/usr/local/sbin/zabbix_agentd' /home/zabbix/test2.sh: 4: [[: not found /home/zabbix/test2.sh: 4: 123: not found]
Грязный хак:Code:keeper:~$ ls -l /bin/sh lrwxrwxrwx 1 root root 4 Mar 10 2014 /bin/sh -> dash
Code:ln -f /bin/bash /bin/sh
Т.е. Debian.Code:keeper:~$ cat /etc/issue OpenMediaVault 0.5.60 (Sardaukar)
Comment
-
Наверное то, что по умолчанию в Debian (и Ubuntu) в качестве интерпретатора используется не bash, несмотря на "SHELL=/bin/bash" и пока явно его не укажешь в качестве шелла - [[ всегда будет валить ошибки и пример из конфига Zabbix будет нерабочим.
А уж как это дело исправить - релинком или чтением man-ов на ночь - решать тому, кто этот ключ использует. В конце концов никто не мешает вынести код в .sh с прямым указаниеми на #!/bin/bash.Comment
-
Итого: слинковал /bin/sh на /bin/bash. Скрипт мониторинга базы заработал. Что это могло пуптно сломать пока не выяснил
Comment
-
Немного некропостинга, раскрывающего тему шелла.
execute.c, function: zbx_execute_nowait
Code:.... pid = zbx_fork(); switch (pid) ... case 0: /* this is the grand child process */ ... /* replace the process with actual command to be executed */ [B] execl("/bin/sh", "sh", "-c", command, NULL);[/B] ...Comment
Comment