实现重定向_通过shell脚本重定向实现监控memcache状态

这是一个通过shell脚本实现对memcache状态监控的示例,利用重定向进行socket通讯。脚本中定义了sendmsg函数发送指令并接收返回数据,通过getout函数处理读取响应。支持通过命令行参数传递主机、端口和命令。示例还提供了使用telnet和nc命令的替代实现方式。
摘要由CSDN通过智能技术生成
c6481916f47f5a063a2855f09273af46.png

#!/bin/sh

#通过传入ip 以及端口,发送指令获得返回数据

#copyright zhou

#函数往往放到最上面

function sendmsg()

{

msg=$1;

echo "$1">&8;

getout;

}

#向socket通道发送指令,并且调用获得返回参数

function getout()

{

#read 命令 -u 从打开文件描述符 8 读取数据,-d读取数据忽略掉:换行符

while read -u 8 -d $'' name;

do

if [ "${name}" == "END" -o "${name}" == "ERROR" ];then

break;

fi;

echo $name;

done

}

#由于:memcached每次通讯完毕,会返回:END或者ERROR(出错),通过判断是否是"END"觉得读取是不是结束,否则循环不会停止

if [ $# -lt 2 ];then

echo "usage:$0 host port [command]";

exit 1;

fi;

[[ $# -gt 2 ]]&&command=$3;

#设置默认值 如果command为定义则为:stats

command="${command=stats}";

host="$1";

port="$2";

exec 8<>/dev/tcp/${host}/${port};

#打开通向通道是8

if [ "$?" != "0" ];then

echo "open $host $port fail!";

exit 1;

fi

sendmsg "$command";

#发送指定命令

sendmsg "quit";

#发送退出通向命令

exec 8

exec 8>&-;

#关闭socket通道

exit 0;

这是通过重定向,实现socket通讯中,发送然后获取返回的例子。其实,上面代码看似一次只能发送一段。时间上。我们可以反复调用:sendmsg ,捕捉输出数据。实现连续的,读与写操作。

实例截图:

其它实现方法:

其实通过:telnet也可以实现的。

[chengmo@centos7 shell]$ (echo "stats";sleep 2)|telnet 127.0.0.1 11211

通过nc命令实现:

[chengmo@centos7 shell]$ (echo "stats")|nc 127.0.0.1 11211

不需要加延迟,直接打开通道

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值