微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

这是在公司时候的一段代码,宕机检测的原理,就只有检测是否能够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}",$status);  

    }  

    if (0 == $status) {  

        $status = true;  

    } else {  

        $status = false;  

    }  

    return $status;  

}  

代码到此完!

代码打包下载:

点击下载

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐