shell更新集群文件,因为自动发布系统未完善,需要更新文件到所有集群主机上。于是使用shell expect,以下代码来自网络后修改运行的。
#!/bin/bash
help()
{
cat << HELP
--------------HELP------------------------
This shell script can copy file to many computers.
Useage:
copytoall filename(full path form /home) targetpathfrom/ username ip1 ip2 ip3....
Example:
copytoall /root/log.log /roo casliyang 192.168.0.5 192.168.0.6 192.168.0.7 192.168.0.8
------------------------------------------
HELP
exit 0
}
currentdate=$(date +%Y-%m)
echo $currentdate " execute copytoall"
if [ $1 = "-h" ] ; then
help
exit 0
fi
file=$1
shift
targetpath=$1
shift
user=$1
shift
tempip=0
hostListFile=/root/list.log
password="123456"
if [ -f $file ] ; then
if [ ! -n "$1" ] ; then
cat $hostListFile | while read line
do
echo $line
if [ -n "$line" ] ; then
expect -c "
spawn scp -r $file ${user}@${line}:${targetpath}
expect {
"yes/no" {send "yesn"; exp_continue;}
"*assword:*" {set timeout 300; send "$passwordn";}
}
expect eof"
#sleep 3
else
echo "none"
#fi & //这果可以实现多进程执行
fi
done
wait
exit 0
else
while [ $# -gt 0 ] ; do
tempip=$1
shift
expect -c "
spawn scp $file ${user}@${tempip}:${targetpath}
expect {
"yes/no" {send "yesn"; exp_continue;}
"*assword:*" {set timeout 300; send "$passwordn";}
}
expect eof"
done
fi
else
echo "wrong file!"
exit 0
fishell批量复制文件到集群,expect
参考链接:
https://blog.csdn.net/lufeisan/article/details/53488395
https://blog.csdn.net/a11101171/article/details/47293109
https://blog.csdn.net/qq_36898043/article/details/79416795
多进程执行:
https://yq.aliyun.com/ziliao/65843