加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

通过screen实现近乎并发的shell远程调用思考和部分实现

发布时间:2016-11-02 08:14:39 所属栏目:Linux 来源:网络整理
导读:假设一种场景,需要在多个节点需要执行相同命令(考虑命令的不确定性),一般使用for 循环,ssh直接调用。例:需要查看每个节点的根目录使用情况: 实际上,仅仅
副标题[/!--empirenews.page--]

假设一种场景,需要在多个节点需要执行相同命令(考虑命令的不确定性),一般使用for 循环,ssh直接调用。例:需要查看每个节点的根目录使用情况:

通过screen实现近乎并发的shell远程调用思考和部分实现

实际上,仅仅需将上述几行命令写成一个脚本,将要执行的命令设为位置参数,即可在一个互信的集群内满足这些要求了,看似问题得到了解决,笔者此前也的确是这么做的,但是问题出现了,有些命令的执行过程漫长,而这种按顺序执行的方法,在执行有些命令时,等待的时间绝对是让人崩溃的,譬如:如果在成百上千个节点集群内,为每个节点更新库(yum update),或者生成yum缓存(yum makecache),或者每个节点都是新的,里面有好多磁盘需要格式化挂载,如果使用for循环按顺序执行,相信我,格式化的磁盘的等待时间会让你无法忍受的,如果这个任务还是在规定的时间必须完成的话.......

好吧,啰嗦半天,需求出现了,先思考要解决的问题,后有简单的部分实现和测试

1、所有节点是互信的,通过安装系统时实现(系统安装阶段实现)

2、所有节点可以使用常规的正则表达式取出对应的IP列表(脚本实现)

3、必须已安装screen包,通过调用这个命令实现近乎并发执行任务(脚本实现)

4、命令执行结果的返回值获取,用以判断是否成功执行(未实现)

5、screen的资源释放问题(未实现)

6、考虑网络故障的错误处理(未实现)

7、考虑执行失败的错误处理(未实现)

8、如果需要在每个节点执行的任务过多,可考虑将需要执行的任务写成一个简单的执行脚本,做推送,并控制执行;4、5、6、7的实现可考虑此方法。

9、考虑远程执行命令时环境变量的问题(未实现)

10、不足之处,欢迎补充:

代码部分实现如下:

代码环境如下:

系统为CentOS6.3 x86_64  均已安装screen包和互信

在互信的节点将命令:yum makecache 分别在如下三个节点执行:

10.1.6.1   disk1.mos.com         disk1

10.1.6.2   disk2.mos.com         disk2

10.1.6.3   disk3.mos.com         disk3

#!/bin/bash
CMD=${1:-/usr/bin/yum makecache}
CMD_SN="disk_ver.1"
DATE="/bin/date +%k:%M:%S/%Y-%m-%d"
SSH="/usr/bin/ssh -q -o StrictHostKeyChecking=no"
SCREEN=/usr/bin/screen
LIST=(`cat /etc/hosts|grep mos.com|awk '{print $1}'`)
for i in ${LIST[@]};do
    $SSH $i $SCREEN -dmS $CMD_SN
    $SSH $i $SCREEN -S $CMD_SN -X screen $CMD
    echo -en "`$DATE` $i done.nn"
done

查看本栏目更多精彩内容:http://www.bianceng.cn/OS/Linux/

在三个节点分别放置一个简单的脚本,用来查看命令是否被成功执行,代码如下:

#!/bin/bash
Date="/bin/date +%k:%M:%S/%Y-%m-%d"
Mlog=/var/log/mon.log
TEE(){
        /usr/bin/tee -a $Mlog
}
while :;do
    INFO=`ps aux|grep -v grep|grep yum`
    if [ -n "$INFO" ];then
        echo -en "`$Date` : $INFO nn" |TEE
    fi
    sleep 1
done

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读