两台服务器健康心跳监测php进程并及时短信通知

1、准备

        需要两台服务器,我用的是阿里云的服务器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

2、client.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);
}
?>

3、server.php

4、启动

#启动client.php 和 server.php
php client.php > output.txt &
php server.php > output.txt &

你可能感兴趣的:(服务器,运维,php,linux)