LINUX.ORG.RU

php shell_exec и nslookup

 , , ,


0

1

Доброго времени суток!

Есть задача мониторить работу DNS серверов домена (на случай если домен или какая-то запись будет удалена из NS, если DNS сервер ляжет, IP адрес сменится и подобное).

Реализация на PHP следующая:

function dnsquery($ns)
{
	$h = "mail.ru";
	$res = trim(shell_exec("nslookup ".$h." ".$ns." | grep 'Address:' | wc -l"));
	$res += 0;
	return $res;
}

Суть идеи в том что если произойдет таймаут и прочая ошибка - в выводе nslookup не будет строчек со словом Address. Если домен не делегирован на указанном NS - будет строчка Address самого NS и результат функции - 1. Если домен нормально настроен то будет результат от 2 (1 адрес сервера имен + 1 адрес A запись домена) до бесконечности (если несколько A записей).

Этот код запускается crontab’ом по очереди с 2 машин в разных датацентрах. Так вот, на одной из них иногда начинает происходить непонятная ерунда: ответ функции 0. Захожу в консоль, запускаю nslookup - ответ правильный. Запускаю тот же скрипт вручную из командной строки - результат не ноль, все верно. Такое может длиться только на этой машине от часа до суток, само возникает, само пропадает.

Сменил shell_exec на

exec("nslookup ".$h." ".$ns, $output, $retval);

Ответ пуст, $retval возвращает сначала -1 потом 10. Что это за магия?