微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

shell基本用法及简单利用expect实现简单本地->跳板机->集群自动化实例

1.执行shell脚本命令

例 test.sh内容如下

#!/bin/bash
# echo 是输出标示 如:输出 This is a example
echo "This is a example"
# 当前目录 pwd ; 列出当前目录下的文件 ls
echo "当前目录"
pwd
ls

注:
其中第一行是提示用bash执行,
#是注释

执行结果

This is a example
当前目录
aa     cc.sh  ee.sh    ff.sh       scp-patch.exp
bb.sh  dd.sh  exam.sh  passall.sh  test.sh

执行脚本有两种形式:
1.先修改脚本权限,再给执行脚本

chmod +x test.sh
./test.sh

2.直接执行 bash , sh, source

bash test.sh
sh test.sh
source test.sh

2 实例 本机=>跳板机(hadoop)=>集群(spark)

因远程登录发送文件需要密码验证,所以选择了expect进行交互式验证。
安装expect:
ubuntu sudo apt-get install expect
contos yum install expect

本机执行的脚本:local.sh

此脚本首先通过echo “Begin …” 打印一句开始Begin …;
就是expect交互验证了;
最后打印一句 END.

#!/bin/bash
echo "Begin .."
# scp file ==> hadoop
set timeout 1000
expect<<-END
spawn scp -r /baselines [email protected]:/home/hadoop
expect "*password*"
send "hadooppassword\r"
expect EOF
exit
END
# scp hadoop.sh ==> hadoop
set timeout 1000
expect<<-END
spawn scp hadoop.sh [email protected]:/home/hadoop
expect "*password*"
send "hadooppassword\r"
expect EOF
exit
END
# scp spark.sh ==> hadoop
set timeout 1000
expect<<-END
spawn scp spark.sh [email protected]:/home/hadoop
expect "*password*"
send "hadooppassword\r"
expect EOF
exit
END
# bash hadoop.sh on hadoop
set timeout 1000
expect<<-END
spawn ssh [email protected]
expect "*password*"
send "hadooppassword\r"
expect "*@*"
send "bash hadoop.sh\r"
expect "*@*"
send "logout\r"
expect EOF
exit
END
echo "End .."

解释:
下边是一整个expect交互:

set timeout 1000 								#设置交互等待的时间
expect<<-END									# expect开始表示
spawn scp -r /baselines [email protected]:/home/hadoop #交互语句
expect "*password*"								# 检测交互语句中含有的字符password,若有就执行send 语句
send "hadooppassword\r"
expect EOF 
exit 											# 退出
END 											#

其中检测可以有多个,但是只有一个spawn。send后变双引号中的 " \r " 是执行标示,不是发送字符。

跳板机执行脚本:hadoop.sh

此hadoop.sh脚本只执行三个节点sparkb3,sparkb4,sparkb5。注意断句之间都是空一个空格(英文下的空格),不要有多的空格,for循环中的语句前边的空格要一致(例如两个控制或者一个tab,要统一),如果执行有问题,可以先看是否空格问题。

#!/bin/bash
for i in {3..5}
do
	echo "Begin .."
	echo "root@sparkb$i"
	set timeout 1000
	expect<<-END
	spawn scp -r bc1 root@sparkb$i:/root/ml4dmc
	expect "*password*"
	send "passwordspark\r"
	expect EOF
	exit
	END
    set timeout 1000
	expect<<-END
	spawn scp spark.sh root@sparkb$i:/root/ml4dmc
	expect "*password*"
	send "passwordspark\r"
	expect EOF
	exit
	END
	set timeout 1000
	expect<<-END
	spawn ssh root@sparkb$i
	expect "*password*"
	send "passwordspark\r"
	expect "*@*"
	send "bash /root/ml4dmc/test2.sh\r"
	expect "*@*"
	send "logout\r"
	expect EOF
	exit
	END
done

集群脚本 spark.sh

此脚本只是启动集群上名为ml4dmc的docker容器。

#!/bin/bash
docker start ml4dmc

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐