300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > linux下使用expect+scp+shell实现分布式集群系统安装 升级 部署

linux下使用expect+scp+shell实现分布式集群系统安装 升级 部署

时间:2024-04-02 23:49:44

相关推荐

linux下使用expect+scp+shell实现分布式集群系统安装 升级 部署

在分布式集群系统中,由于有很多的节点,如果手动的部署,将是一个很耗时的过程。

由于每个节点部署服务相同,第一想到的就是scp命令做批处理,不过有个问题,scp命令每次都是提示输入密码,正好expect工具可以处理命令交互的情况。

前面已经讲过如何将expect做成绿色工具了,将所有节点的主机地址写入一个hosts-list文件中,循环读取地址执行scp拷贝。

升级包和expect工具的目录结构如下:

$ tree -L 3.├── done.sh├── hosts-list└── tools├── bin│ ├── expect│ ├── libexpect5.45.so│ └── libtcl8.4.so├── lib│ └── tcl8.4└── sbin└── docker.sh5 directories, 6 files

其中done是启动脚本,tools里面是expect工具命令,docker是执行scp命令脚本,hosts-list是节点主机地址。

done启动脚本如下:

$ cat done.sh #!/bin/bashusrname=ubuntupasswd=ubuntusrc_dir=../xtrouterdst_dir=/home/$usrnameexpect_bin=./tools/bin/expectdocker_shl=./tools/sbin/docker.shhosts_file=hosts-listfor line in $(cat $hosts_file)doecho "=================> start update host:$line"$expect_bin $docker_shl $line $usrname $passwd $src_dir $dst_dirdoneecho "all host update success!"

docke执行scp命令脚本如下:

$ cat tools/sbin/docker.sh #!/usr/bin/expectset timeout -1set host [lindex $argv 0]set username [lindex $argv 1]set password [lindex $argv 2]set src_file [lindex $argv 3]set dest_file [lindex $argv 4]spawn scp -v -r $src_file $username@$host:$dest_fileexpect {"(yes/no)?"{send "yes\n"expect "*assword:" { send "$password\n"}}"*assword:"{send "$password\n"}}expect "100%"expect eof

需要注意的一点是要将上面的超时时间设置为最大值,否则使用默认30秒后命令中断。

hosts-list主机列表如下:

$ cat hosts-list 11.37.7.111.37.7.211.37.7.311.37.7.411.37.7.511.37.7.611.37.7.711.37.7.811.37.7.911.37.7.1011.37.7.1111.37.7.1211.37.7.1311.37.7.1411.37.7.1511.37.7.1611.37.7.1711.37.7.1811.37.7.1911.37.7.20

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。