Linux shell实现HTTP服务示例代码

 更新时间:2016年08月25日 09:45:52   投稿:daisy  
这篇文章介绍的是如何实现一个可以调用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服务的内容到这就基本结束了,希望对大家的工作和学习能有所帮助,如果有疑问可以留言讨论。

相关文章

  • shell中tail和head的用法小结

    shell中tail和head的用法小结

    本文主要介绍了shell中tail和head的用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • shell命令返回值判断的方法实现

    shell命令返回值判断的方法实现

    本文主要介绍了shell命令返回值判断的方法实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • VPS自动备份数据库到FTP的脚本代码

    VPS自动备份数据库到FTP的脚本代码

    示例的文件目录结构:我在/home下操作,自动脚本名称为backup.sh(放置于/home目录下),VPS本地本分目录为/home/backup
    2013-01-01
  • 强制删除rpm包的方法

    强制删除rpm包的方法

    本文给大家介绍强制删除rpm包,对rpm包删除方法感兴趣的朋友可以一起学习
    2015-11-11
  • crontab每10秒执行一次的实现方法

    crontab每10秒执行一次的实现方法

    下面小编就为大家带来一篇crontab每10秒执行一次的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Shell中删除某些文件外所有文件的3个方法

    Shell中删除某些文件外所有文件的3个方法

    这篇文章主要介绍了Shell中删除某些文件外所有文件的3个方法,即在删除文件时保留一些想要的,其它的则删除,需要的朋友可以参考下
    2014-10-10
  • linux 获取文件名称并生成列表txt的方法

    linux 获取文件名称并生成列表txt的方法

    今天小编就为大家分享一篇linux 获取文件名称并生成列表txt的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Shell过滤器的具体使用

    Shell过滤器的具体使用

    这篇文章主要介绍了Shell过滤器的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Linux中的内核链表实例详解

    Linux中的内核链表实例详解

    这篇文章主要介绍了Linux中的内核链表实例详解的相关资料,链表中一般都要进行初始化、插入、删除、显示、释放链表,寻找节点这几个操作,需要的朋友可以参考下
    2017-08-08
  • shell linux中如何用shell写一个占用CPU的脚本

    shell linux中如何用shell写一个占用CPU的脚本

    本文主要介绍了shell linux中如何用shell写一个占用CPU的脚本,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09

最新评论