需要两台服务器,我用的是阿里云的服务器A 和服务器B ,需要监测的是服务器B,所以我在服务器A 创建文件client.php, 在服务器B上面创建文件server.php
#登录服务器A,在服务器上/home/heartbeat下面创建client.php
cd /home/heartbeat
vi client.php
#登录服务器B,在服务器上/home/heartbeat下面创建client.php
cd /home/heartbeat
vi server.php
0) {
echo '已通知开发人员';
} else {
echo '未通知开发人员';
$res = mysqli_query($db_connect, "INSERT INTO heart(heart_time, status, version, is_delete, created_at, updated_at) VALUES ('" . $date . "', 1, 0, 0, '" . $now . "', '" . $now . "')");
echo json_encode($res);
// 连接失败,服务器B可能出现故障
$msg = '服务器心跳监测报警';
$mobile = ['电话号'];
$mobile = implode(',', $mobile);
//我这里用的是短信通知
$curl = 'http://smssh1.253.com/msg/send/json';
$https = 'true';
$data = array(
'account' => '短信平台帐号',
'password' => '短信平台密码',
'msg' => urlencode($msg),
'phone' => $mobile,
'report' => true,
);
//$response = CurlUtil::_request($url, true, 'post', $postArr);
//echo $url;
echo $msg;
$method = 'json';
$ch = curl_init();//初始化
curl_setopt($ch, CURLOPT_URL, $curl);//设置访问的URL
curl_setopt($ch, CURLOPT_HEADER, false);//设置不需要头信息
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//只获取页面内容,但不输出
if ($method == 'json') {
$headers = array("Content-type: application/json;charset=UTF-8");
$data = json_encode($data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
if ($https) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//不做服务器认证
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//不做客户端认证
}
if (!empty($data)) {
curl_setopt($ch, CURLOPT_POST, true);//设置请求是POST方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//设置POST请求的数据
}
$str = curl_exec($ch);//执行访问,返回结果
curl_close($ch);//关闭curl,释放资源
echo $str;
}
echo $now . '无法连接到服务器B' . PHP_EOL;
} else {
// 发送心跳消息
$heartbeatMessage = 'Heartbeat';
socket_write($clientSocket, $heartbeatMessage, strlen($heartbeatMessage));
// 等待响应
$response = socket_read($clientSocket, 1024);
echo $now . '收到响应:' . $response . PHP_EOL;
}
// 关闭套接字
socket_close($clientSocket);
// 休眠一段时间后再次发送心跳
sleep(100);
}
?>
#启动client.php 和 server.php
php client.php > output.txt &
php server.php > output.txt &