BeWithYou

胡搞的技术博客

  1. 首页
  2. 运维/工具
  3. shell脚本scp多个机器的文件

shell脚本scp多个机器的文件


如果程序不使用远程日志的话,日志文件都会分散在部署的机器本地上。这种情况很常见,比如大型网站的php文件都是分布在许多web服务器上,其他cgi程序也会部署到各个机器上。

有时候我们需要把这些机器上的日志进行汇总,用于排查问题,分析数据。这里记录一下spawn+scp获取远程机器上的文件。

#!/bin/bash
for ip in 10.194.146.38 10.194.146.37 10.217.153.34 10.217.153.33 10.217.153.31 10.217.153.35 10.217.1
42.25 10.217.142.26 10.217.142.28 10.217.142.30 10.217.142.31 10.217.142.32 10.205.137.85 10.205.137.1
02 10.205.138.165 10.205.138.166 10.205.150.146 10.205.150.125 10.205.150.69 10.205.150.58 10.205.150.
114 10.205.150.115 10.205.150.116 10.205.150.117 10.205.150.118 10.205.150.53 10.205.150.54 10.205.150
.55 10.205.150.56 10.205.148.205
do
mkdir $ip
expect -c"
spawn scp appadmin@$ip:/data/applog/dao_bc_deal/dao_bc_deal_error* ./$ip/
expect {
-re \"Are you sure you want to continue connecting (yes/no)?\" {
send \"yes\\r\"
expect \"Password:\"
send \"\App@idc\\r\"
} -re \"Password:\" {
send \"App@idc\\r\"
}
}
interact
"
done

expect,spawn用于shell脚本中模拟与终端交互的过程,简单看来就是一问一答的形式。它也经常用于一个命令登陆远程机器,如下:

#!/usr/bin/expect
spawn /usr/bin/ssh dev@10.151.18.22
expect "*assword:"
send "dev123\r"
interact

这样使用的时候,直接./dev.sh就可以了。注意要给shell脚本可执行权限,因为跑的时候不适用sh来跑,是直接从脚本第一行得知用expect来跑。

回到顶部