这是在公司时候的一段代码,宕机检测的原理,就只有检测是否能够ping通主机,如果不通发送mail,这只是我能想到的办法,有大神如果能想到更好的检测办法,不吝赐教!
OK,废话少说,翠花,上代码!
(ps:代码中用到了PHPMailer,参考的人,请下载打包代码吧~)
<?php /** * 检测主机宕机脚本,每10秒检测一次 * 若主机宕机会发送邮件通知,发送邮件的间距时间为1小时 */ set_time_limit(0); define('ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR); // 检测的IP地址 $ipAddress = '45.33.36.121'; // 保存发送mail的时间的文件 $file = ROOT . 'sendMailTime.txt'; // 创建文件 file_put_contents($file, 0); if (file_exists($file)) { // 看清楚,这里是无限循环哦 while (true) { // ping SinoAngel主机 $hostStatus = pingAddress($ipAddress); if (!$hostStatus) { $lastTime = (int) file_get_contents($file); // 距离上次超过一个小时就发送宕机邮件 if (time() - $lastTime > 3600) { $row = sendMail([ 'subject' => "{$ipAddress}主机宕机警告", 'body' => "dear,{$ipAddress}主机已经宕机,请知晓,发送时间:" . date('Y-m-d H:i:s'), 'address' => [ [ 'name' => 'Stronger', 'email' => '[email protected]' ], [ 'name' => '李星', 'email' => '[email protected]' ] ] ]); if ($row) { file_put_contents($file, time()); } } } sleep(10); } } else { exit("fail"); } /** * 发送邮件 * @param type $config * @return boolean */ function sendMail($config = []) { require ROOT . 'PHPMailer/PHPMailerAutoload.php'; $mail = new PHPMailer; $mail->isSMTP(); // 设置邮件使用SMTP $mail->Host = 'smtp.qq.com'; // 邮件服务器地址 $mail->SMTPAuth = true; // 启用SMTP身份验证 $mail->CharSet = "UTF-8"; // 设置邮件编码 $mail->setLanguage('zh_cn'); // 设置错误中文提示 $mail->Username = '[email protected]'; // SMTP 用户名,即个人的邮箱地址 $mail->Password = 'ss123456'; // SMTP 密码,即个人的邮箱密码 $mail->SMTPSecure = 'tls'; // 设置启用加密,注意:必须打开 php_openssl 模块 $mail->Priority = 1; // 设置邮件优先级 1:高, 3:正常(默认), 5:低 $mail->From = '[email protected]'; // 发件人邮箱地址 $mail->FromName = 'SinoAngel-Server'; // 发件人名称 if (!isset($config['address']) || empty($config['address'])) { return false; } // 收件人 $address = $config['address']; if (isset($address['name']) && isset($address['email'])) { if (empty($address['name']) || empty($address['email'])) { return false; } $mail->addAddress($address['email'], $address['name']); // 收件人 } else { foreach ($address as $addKey => $addVal) { if (!empty($addVal['email']) && !empty($addVal['name'])) { $mail->addAddress($addVal['email'], $addVal['name']); // 收件人 } } } $mail->WordWrap = 50; // 设置自动换行50个字符 // 添加附件 if (isset($config['file']) && !empty($config['file'])) { if (is_string($config['file'])) { $mail->addAttachment($config['file']); } elseif (is_array($config['file']) && !empty($config['file'])) { foreach ($config['file'] as $file) { $mail->addAttachment($file); } } } $mail->isHTML(true); // 设置邮件格式为HTML // 主题 if (isset($config['subject']) && !empty($config['subject'])) { $mail->Subject = $config['subject']; } // 主体内容 if (isset($config['body']) && !empty($config['body'])) { $mail->Body = $config['body']; } return $mail->send(); } /** * 使用PHP检测能否ping通IP或域名 * @param type $address * @return boolean */ function pingAddress($address) { $status = -1; if (strcasecmp(PHP_OS, 'WINNT') === 0) { // Windows 服务器下 $pingresult = exec("ping -n 1 {$address}", $outcome, $status); } elseif (strcasecmp(PHP_OS, 'Linux') === 0) { // Linux 服务器下 $pingresult = exec("ping -c 1 {$address}", $outcome, $status); } if (0 == $status) { $status = true; } else { $status = false; } return $status; }代码到此完!
代码打包下载地址:链接: http://pan.baidu.com/s/1ntna2Pr 密码: m9iw
谁转载不写我的出处,生儿子没屁眼~
原创地址:http://blog.csdn.net/liruxing1715/article/details/48523083