这是在公司时候的一段代码,宕机检测的原理,就只有检测是否能够ping通主机,如果不通发送mail,这只是我能想到的办法,有大神如果能想到更好的检测办法,不吝赐教!
OK,废话少说,翠花,上代码!
(ps:代码中用到了PHPMailer,参考的人,请下载打包代码吧~)
<?PHP
/**
* 检测主机宕机脚本,每10秒检测一次
*/
define('ROOT',dirname(__FILE__) . DIRECTORY_SEParaTOR);
// 检测的IP地址
$ipAddress = '45.33.36.121';
$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");
}
/**
* 发送邮件
* @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] 举报,一经查实,本站将立刻删除。