После переезда на другой сервер из-за кривых настроек дважды возникла ситуация, при которой сайты оказвались в дауне, а я это замечал только спустя 10-12 часов. Такая ситуация, конечно, недопустима, и, помимо исправления настроек, я задумался, как избегать таких длинных даунтаймов. Логичное решение — оповещение по sms.

Да, есть куча сервисов, которые позволяют мониторить ваши сайты/сервера/демоны, отправляя вам как e-mail, так и SMS при возникновении проблем. Однако, ни в одном из них нет возможности бесплатного использования SMS в качестве уведомлений, везде предлагается подписка. Как правило, речь идет о суммах порядка 5-10$ в месяц. Мне это показалось слишком нерациональным — даже за пару СМС в течение месяца платить такую сумму неразумно. Поэтому я решил, что справлюсь сам, и справился :)

Итак, нам надо:
1. Сервис отправки СМС с API-интерфейсом
2. Любой хостинг, позволяющий использовать функцию fsockopen (95% хостингов это позволяют), с которого мы будем проверять наш сервер на доступность.

Я использовал сервис sms16.ru. Одна СМСка у них стоит 50 коп, есть api и куча другого функционала, который нам не понадобится. Регаемся, кидаем на счет 20-30 руб (хватит за глаза :)), идем в раздел API, качаем простой пример на PHP. Заходим на свой хостинг, заливаем пример в файл, скажем, send.php. Создаем еще один файл, примерно такого содержания:

<?
$url = "mycoolsite.ru"; //сайт на сервере, который будем мониторить
$myphone = "79998887766"; //наш телефонный номер
$mylogin = "login"; //логин на sms19.ru
$mypasswd = "passwd"; //парольт на sms19.ru

$fp = fsockopen ($url, 80, $errno, $errstr, 5);
if ($fp) {
	echo "server is ok";
	$message = "";
} else {
	$fps = fsockopen ($url, 80, $errno, $errstr, 20);
	if ($fps) {
		$message = "server is very slow";
	} else {
		$message = "server is down";
	}
}
if ($message) include_once ("send.php");
?>

Тут мы пытаемся подключиться к нашему сайту, если он отвечает в течение 5 секунд — значит все ок, дальше мы ничего не делаем. Если он отвечает между 5 и 20 секундами — сообщение будет информировать нас об очень медленной работе сервера. Если же сервер не отвечает более 20 секунд — значит, он в дауне. В конце мы отправляем sms-ку, включая соответствующий файл в скрипт с соответствующим сообщением.

В файле send.php мы меняем только шаблон xml:

$xml = '<?xml version="1.0" encoding="utf-8" ?>
<request>
    <message type="sms">
	<sender>inet2sms</sender>
	<text>'.$message.'</text>
	<abonent phone="'.$myphone.'"/>
    </message>
    <security>
        <login value="'.$mylogin.'" />
        <password value="'.$mypasswd.'" />
    </security>
</request>';

Вместо логина и пароля можно использовать xml-api-ключ, чтобы не светить данные входа. Но т.к. у меня там лежит 20 руб, пусть светятся, не страшно :)

Вот, в принципе, и все, надо только потестить получившийся результат, вбив несуществующий url в переменную $url, вам должна прийти смска с соответствующим сообщением.

Ах да, под конец, надо получившийся скрипт добавить в cron. Я настроил запуск проверки доступности сайта раз в полчаса.