使用PHP制作主机宕机检测,并发送Mail通知

来源:互联网 发布:路老膏方 诈骗让网络 编辑:程序博客网 时间:2024/06/15 17:09

这是在公司时候的一段代码,宕机检测的原理,就只有检测是否能够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' => 'stronger@sinoangel.cn'                        ],                        [                            'name' => '李星',                            'email' => 'lixing@sinoangel.cn'                        ]                    ]                ]);                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 = 'server@sinoangel.cn';              // SMTP 用户名,即个人的邮箱地址    $mail->Password = 'ss123456';                         // SMTP 密码,即个人的邮箱密码    $mail->SMTPSecure = 'tls';                            // 设置启用加密,注意:必须打开 php_openssl 模块    $mail->Priority = 1;                                  // 设置邮件优先级 1:高, 3:正常(默认), 5:低    $mail->From = 'server@sinoangel.cn';                  // 发件人邮箱地址    $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



0 0
原创粉丝点击