利用Linux中的计划任务+PHP网页程序,实现对web服务器运行状况的监测【每5分钟监测一次,并邮件提醒】
一、我的监测服务器环境:
rhel5.5+apache2.2+php5
二、功能描述:
写一个PHP页面,实现如下功能:
请求要监控的WEB服务器的某一个页面的内容,如果返回不到数据,或者返回的数据里没有包含我期望的代码【用于自定义错误页面时的情况】,那我就认为WEB服务出问题了【宕机或者遭到内容改写攻击】,然后就发送一个邮件出来,这个邮件可以和手机进行绑定【139邮箱可以做到】
而我在计划任务里去做什么呢?每隔5分钟,就去请求我的这个监测页面。
最终,我实现了每隔5分钟对服务器的运行状况进行检查的目的。
三、说明
这里发送邮件的代码,也是参考了网友们的贡献,非原创。。
发送邮件有两个函数,一个是Wndows服务器下用的,一个是Linux服务器下用的,如果你是Lnux,请使用带_unix后缀的函数。
四、如何实现这个计划任务?
编辑 /etc/crontab,里面加入下面这行:
*/5 * * * * root /usr/bin/curl
【解释下,第一个字段,表示每5分钟执行一次】
保存后使用service crond restart命令重启crond服务
五、PHP代码:
贴源代码了:
monitor.php:
<?php
//发送邮件
function send_email($sendto_email,$subject,$body) {
require("smtp.php");
##########################################
$smtpserver = "linuxidc.linuxidc.com";//SMTP服务器
$smtpserverport = 25;//SMTP服务器端口
$smtpusermail = "linuxidc@linuxidc.com";//SMTP服务器的用户邮箱
$smtpemailto = $sendto_email;//发送给谁
$smtpuser = "linuxidc@linuxidc.com";//SMTP服务器的用户帐号
$smtppass = "linuxidc";//SMTP服务器的用户密码
$mailsubject = $subject;//邮件主题
$mailbody = $body;//邮件内容
$mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件
##########################################
$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.
$smtp->debug = true;//是否显示发送的调试信息
$smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype);
return true;
}
function send_emial_unix($sendto_email,$subject,$body)
{
require 'class.phpmailer.php';
try {
$mail = new PHPMailer(true);
$body = $body;
$mail->CharSet = "UTF-8";
$mail->IsSMTP(); // 启用SMTP
$mail->SMTPAuth = true; // 启用SMTP认证
$mail->Port = 25; // 端口
$mail->Host = "linuxidc.linuxidc.com"; // SMTP server
$mail->Username = "linuxidc@linuxidc.com"; // SMTP server username
$mail->Password = "linuxidc"; // SMTP server password
//$mail->IsSendmail(); // tell the class to use Sendmail
//$mail->AddReplyTo("linuxidc@linuxidc.com","First Last"); //发件人信息
$mail->From = "linuxidc@linuxidc.com"; //发给地址
$mail->FromName = "linuxidcname"; //
$mail->AddAddress($sendto_email);
$mail->Subject = $subject; //标题
//$mail->AltBody = ""; // optional, comment out and test
$mail->WordWrap = 50; // set word wrap
$mail->MsgHTML($body);
$mail->IsHTML(true); // send as HTML
$mail->Send();
echo 'OK';
} catch (phpmailerException $e) {
echo $e->errorMessage();
}
}
function check($host, $find)
{
$str= file_get_contents($host);
if($str){
if(strpos($str, $find)){
//虽然有内容,但是包含了你自定义的错误报警内容,所以同样认定为网页不正常
return false;
}
else{
return true;
}
}
else{
return false;
}
}