使用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
- 使用PHP制作主机宕机检测,并发送Mail通知
- 使用PHP制作主机宕机检测,并发送Mail通知
- 封装PHP mail函数发送HTML邮件并使用中文发件人且自定义发件人邮箱地址
- php使用pear mail发送邮件
- php发送socket mail
- PHP -----发送电子邮件 ,mail()
- 使用flask mail发送mail
- ubuntu下,使用postfix实现php发送mail功能
- PHP使用mail函数发送邮件标题乱码问题
- php 里的使用mail()发送邮件详解
- php中使用mail函数发送邮件时的注意事项
- php使用内置函数mail()发送邮件的解决方案
- wamp下使用php的mail()函数发送邮件问题
- thinkphp php 使用mail---sendmial函数去发送邮件
- 使用mail发送附件
- xampp 配置php发送mail
- [php]mail函数发送邮件
- 使用Service下载图片并发送通知读取图片内容
- 正则表达式的继续学习
- 在 Zend Studio 12.5 里下断点调试运行 PHP 源代码
- getParent()的妙用:cocos中层级的编辑
- 打开IDEA时报错“Failed to create JVM: error code -6”
- psql的简单题目答案
- 使用PHP制作主机宕机检测,并发送Mail通知
- 文字居中不仅仅只用line-height
- 深入JNI
- Notification详解
- Yii 直接执行SQL语句的几种使用方法
- LINQ Take和Skip
- scrollview和listview 冲突 动态定listview高度
- 重新学习C# 之 数据类型(一)
- 趣谈i++与++i