通过 PHP做主机故障检测,并发送电子邮件
发布时间:2023-06-05 13:30:09 所属栏目:PHP教程 来源:
导读:这是在公司时候的一段代码,宕机检测的原理,就只有检测是否能够ping通主机,如果不通发送mail,这只是我能想到的办法,有大神如果能想到更好的检测办法,不吝赐教!
OK,废话少说,翠花,上代码!
(ps:代码
OK,废话少说,翠花,上代码!
(ps:代码
|
这是在公司时候的一段代码,宕机检测的原理,就只有检测是否能够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', ], [ 'name' => '李星', ] ] ]); 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 = // SMTP 用户名,即个人的邮箱地址 $mail->Password = 'ss123456'; // SMTP 密码,即个人的邮箱密码 $mail->SMTPSecure = 'tls'; // 设置启用加密,注意:必须打开 PHP_openssl 模块 $mail->Priority = 1; // 设置邮件优先级 1:高,3:正常(默认),5:低 $mail->From = // 发件人邮箱地址 $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; } (编辑:驾考网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
