Hello! 欢迎来到盒子萌!

php脚本多网站监控状态宕机或者错误QQ机器人通知


此脚本通过curl目标网站,然后得到状态码做出判断的监控。
正常访问的网站返回状态码是200,也就是返回200时是正常访问的,
如出现0 403 404 444 等等错误状态码,则是网站访问异常,进而通知机器人反馈到目标QQ进行通知
而这个过程需要搭配机器人

QQ机器人架设

这里用到了go-cqhttp
机器人安装教程 https://www.boxmoe.com/522.html

脚本架设

需要支持php的环境,创建一个php文档复制下方代码,然后修改监控网站和QQ号码,
并且把脚本访问链接加入到计划任务执行,至于多久监控一次这个自定义

最后的 http://127.0.0.1:5700 是机器人api地址和端口,替换成自己的

<?php
//监控网站
$check_web = array(
'https://www.boxmoe.com/',
'https://boxmoe.com/',
);

//通知QQ
$qq='504888738';

//日志文本输出路径
$oklogPath = __DIR__ . "/web-ok.log";
$nologPath = __DIR__ . "/web-no.log";

//错误输出日志到文本
function errLog($msg)
{
    global $nologPath;
    $message = "[错误]" . date("[y-m-d H:i:s]") . " $msg\n";
    error_log($message, 3, $nologPath);
}
//正常状态输出日志到文本
function infoLog($msg)
{
    global $oklogPath;
    $message = "[正常]" . date("[y-m-d H:i:s]") . " $msg\n";
    error_log($message, 3, $oklogPath);
}


//执行curl检测逻辑,最大执行时间是 60秒
ini_set('max_execution_time',60);
function httpcode($url){
  $ch = curl_init();
  $timeout = 3;
  curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch, CURLOPT_HEADER, 1);
  curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_exec($ch);
  return $httpcode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
  curl_close($ch);
}

for($i=0;$i<count($check_web);$i++){
	$website = $check_web[$i];
	$webcode = httpcode($check_web[$i]);
	if($webcode != 200){
	 if($webcode == 0){$errwebcode =$webcode.' 宕机!宕机!宕机!'; }else{$errwebcode = $webcode.' 不能正常打开';}   
	 errLog('[检测异常] [监控网站]'.$website.' -> [网站状态]'.$errwebcode.'');
	 echo '[检测异常] [监控网站]'.$website.' -> [网站状态]'.$errwebcode.'<br>';
	
	 $eMessage ="[检测异常] \n \n[监控网站]\n".$website."\n[网站状态]".$errwebcode."";
	 boxmoe_msg_qq($qq, $eMessage);
	}else{
	 infoLog('[检测正常] [监控网站]'.$website.' -> [网站状态]'.$webcode.'');
	 echo '[检测正常] [监控网站]'.$website.' -> [网站状态]'.$webcode.'<br>';
	}
 
}
//开始QQ机器人推送
function boxmoe_msg_qq($qq, $msg)
{
	$message = "$msg";
	$time = "[检测时间:". date("y-m-d H:i:s")."]";
    $desp = $message . "\n".$time;
    // 封装,推送到 QQ
    $postdata = http_build_query(
        array(
            'message' => $desp
        )
	    );
// 执行POST请求
    $opts = array('http' =>
        array(
            'method' => 'POST',
            'header' => 'Content-type: application/x-www-form-urlencoded',
            'content' => $postdata
        )
    );
    $context = stream_context_create($opts);  
    return $result = file_get_contents('https://127.0.0.1:5700/send_private_msg?user_id='.$qq.'', false, $context);
}

?>

发表评论

相关阅读