Tag Archives: ошибки

Nagios и ошибка проверки PINGа

В какой то момент нагиос стал хаотично выдавать по разным сервисам в разное время ошибку:

CRITICAL — popen timeout received, but no child process

При этом ошибка не связана с реальной доступностью сервиса, все работало как положено.

Так вот, решение как оказалось простое — для проверки на пинг нужно отключить протокол IPv6.

Для этого открываем на редактирование файл /path/to/nagios/objects/commands.cfg

И там ищем два блока:

define command{
        command_name    check-host-alive
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
        }

и

define command{
        command_name    check_ping
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
        }

И редактируем их до такого вида:

define command{
        command_name    check-host-alive
        command_line    $USER1$/check_ping -4 -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
        }

и

define command{
        command_name    check_ping
        command_line    $USER1$/check_ping -4 -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
        }

То есть, всего лишь добавляем опцию -4, которая указывает, что нужно использовать только протокол IPv4.

После этого перезапуск нагиоса и проблема решена.

service nagios reload

FreeBSD: проблемма со статикой на nginx.

Итак, если у вас хост настроен правильно, но при запросе любого статического контента сервер вам возвращается ответ 200 ok, но само тело ответа пустое, а логах nginx красуются строки типа

4140#0: *4 sendfile() failed (45: Operation not supported) while sending response to client

Это верный признак того, что вам нужно найти где в конфиге у вас прописано

sendfile on;

и удалить либо изменить на off его значение.

Уже второй раз сталваюсь с этой проблеммой и первый раз я было подумал что это что то с самой ОС, пришлось все переставить/пересобрать, и вот на второй раз таки нашел реальную причину.

Трудноуловимая ошибка с Zend_Loader_Autoloader::$_instance и доступом к контантам класса.

Продолжаю серию увлекательных особенностей ZF и PHP в общем.

Итак, если по неизвестной закономерности у вас возникает ошибка Access to undeclared static property: Zend_Loader_Autoloader::$_instance или же происходит Fatal error с ошибкой «обращение к несуществующей переменной» (что то типа Fatal error: Access to undeclared static property: Zend_Loader_Autoloader::$_instance in) , а в коде это выглядит типа как self::MYCONST то эта запись для вас.

В общем написал я недавно класс Zend_Session_SaveHandler_Memcached что бы использовать его как сторэдж для сохранения сессий.

И поначалу вроде как все работало нормально, но потом по неизвестной закономерности начала появляться ошибка что скрипт обращается к несуществующей переменной. Естественно, константа в классе объявлена. Замена self на Zend_Session_SaveHandler_Memcached результата не дало, ровно как и обновление пхп со всеми модулями. При это еще после того как скрипт меняется, страница грузится нормально, без ошибок, а последующие загрузки вызывают эту ошибку.

И еще более загадочно, без установленной закономерности, раз на сколько то вызовов появляется ошибка, озвученная выше.

В итоге установил что проблема в параметре apc.cache_by_default который задается в php.ini и который был включен на этом сервере, а на других (на которых и ошибки этой не было) данного парамера пхпинфо вообще не возвращал. Установка параметра в 0 соответственно решило проблему.

Такой день.

Так же вариант менее варварский, но мной лично не проверенный: http://stackoverflow.com/questions/7749198/getting-apc-to-play-nice-with-spl-autoload-register за ссылку спасибо Роману Яровому из комментариев.

Будьте внимательны при обновлении таблиц

Сегодня убил минут 20 на поиск причины бага: на своей машине код выполняется нормально, а на рабочем проекте выдает ошибку что одно из полей таблицы в запросе не существует. Перед этим я конечно обновлял таблицы. По несколько раз перепроверял — все идентично. Уже и прямо с майадмина копировал имя колонки — не помогало.

В общем, проблема была в том, что при обновлении таблиц я копировал имена из локального майадмина и вставлял на рабочем проекте. И вот к одному из полей добавился символ табуляции. При этом майадмин его не показывает(в просмотре структуры таблицы). По моему следовало бы обрезать подобные символы при вставке в таблицу, но разработчики не подумали об этом.

Не повторяйте чужих ошибок =)