dadv: (stopstupid)
[personal profile] dadv

Серверу под FreeBSD 8 нужно отдавать температуру CPU в градусах цельсия через SNMP. Команда sysctl -n dev.cpu.0.temperature выдаёт температуру с десятичными долями и буквой C в конце, для отдачи по SNMP в виде INTEGER будем по-простому отрезать разделитель и всё, что после него:

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin

cput="`sysctl -n dev.cpu.0.temperature`"
echo ${cput%%,*}

Запускаем вручную, проверяем, что выдаёт. Настраиваем bsnmpd с использованием его плагина bsnmp-ucd, чтобы вызывал наш скрипт и его вывод отдавал в виде OID внутри ветки enterprise - всё работает. Рисуем график через mrtg - рисуется.

Так работает несколько дней, после перезагрузки сервера график рисоваться перестаёт. Проверяем, запуская скрипт вручную - температуру показывает. Через SNMP данные не передаются, хотя до ребута передавались. Другие подобные OID, получаемые через запуск внешних скриптов из bsnmp-ucd, по-прежнему исправно отдаются.

Внимание, вопрос - что это было? Ответ напишу через пару дней, если никто не догадается.

Update: как быстро указали в комментах, sysctl использует текущую локаль для выдачи разделителя целой и дробной части числа. После настройки bsnmpd требуется его перезапуск, чтобы привести в действие изменения его конфигурации и при перезапуске он унаследовал текущую локаль, в которой разделитель - запятая. После перезагрузки bsnmpd был запущен с локалью "C", в которой разделитель - точка. Отсечение разделителя с символами после него сломалось, строка в целое число больше не конвертируется, целое число по SNMP не передаётся.

Правильное решение - сделать скрипт независимым от локали, которая была ему передана путем явного переопределения локали в "C" и замены разделителя на точку:

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin
export LC_ALL=C
cput="`sysctl -n dev.cpu.0.temperature`"
echo ${cput%%.*}

This account has disabled anonymous posting.
(will be screened if not validated)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org

Profile

dadv: (Default)
Choose your future

July 2024

M T W T F S S
12 34567
891011121314
15161718192021
22232425262728
293031    

Tags

Style Credit

Powered by Dreamwidth Studios