下記のプログラムをcronで定期的に実行する。
HTTPヘッダーを取得する方法
// 負荷に応じて、分岐処理を少なくする
$mail = 'info@example.com';
$targetServer = 'https://isaxxx.com/';
// 先頭の@マークは、スクリプトエラーが生じた場合に、エラーメッセージを表示させないための記号
$headers = @get_headers($targetServer, 1);
if (!$headers) {
mail($mail, 'HTTPヘッダーが取得できませんでした', $targetServer, 'From:'.$mail);
} else if ($headers[0] !== 'HTTP/1.1 200 OK' && $headers [0] !== 'HTTP/1.0 200 OK') {
mail($mail, 'HTTPヘッダーに異常があります' . $headers[0], $targetServer, 'From:'.$mail);
} else {
$t1 = microtime(true);
$html = @file_get_contents($targetServer);
$t2 = microtime(true);
if ($html === '') { // 他にもデータベースの接続に失敗している場合の文字列など
mail($mail, 'Webサイトに異常があります', $targetServer, 'From:'.$mail);
} else {
$responseTime = floor(($t2 - $t1) * 1000;
preg_match ("/<title>(.*)<\/title>/i", $html, $match);
echo $match[1] . ': ' . $responseTime;
}
}
ping 送信する方法
$mail = 'info@example.com';
$targetServer = 'https://isaxxx.com/';
$targetServerIP = 'xxx.xxx.xxx.xxx';
$ping_command_str = 'ping -c 3 -w 5 ' . $targetServerIP;
if (strstr(`$ping_command_str`, '100% packet loss')) {
mail($mail, 'Webサイトに異常があります', $targetServer, 'From:'.$mail);
}
データベースの死活監視
// 監視するサーバーに設置し、外部サーバーで状態を確認する
define('MYSQL_HOST', 'localhost');
define('MYSQL_USER', 'xxx');
define('MYSQL_PASS', 'xxx');
$link = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die('error');
if ($link) {
mysql_close($link);
echo '1';
}