scp linux 自动化,【Linux-运维-自动化】expect批量scp中断 (spawn scp 中断)

【需求背景】

从不同机器之间批量copy大文件,想实现一个脚本自动化运作

【实现方法】

#!/usr/bin/expect

set user [lindex $argv 0]

set ip [lindex $argv 1]

set passwd [lindex $argv 2]

set srcfile [lindex $argv 3]

set dstdir [lindex $argv 4]

spawn scp $user@$ip:$srcfile $dstdir

expect {

"yes/no)?" { send "yes\r";puts "yes" }

"assword:" { send "$passwd\r" }

}

expect eof

【问题】

由于文件较大(10G-100G不等),每次拷贝文件,操作会在一段时间后就会自动中断,导致文件无法完全传输

【问题产生原因】

expect中执行命令是有一个timeout的设定的,默认超时时间为10s。

若一条命令未timeout限定时间内执行完,就会中断该条命令的下一条命令。

备注:

这个特性最初设置是为了防止某些命令执行完后导致死机的情况

【解决方案】

在expect脚本中设定timeout,覆盖原本的timeout即可

#!/usr/bin/expect

set user [lindex $argv 0]

set ip [lindex $argv 1]

set passwd [lindex $argv 2]

set srcfile [lindex $argv 3]

set dstdir [lindex $argv 4]

set timeout 2000

spawn scp $user@$ip:$srcfile $dstdir

expect {

"yes/no)?" { send "yes\r";puts "yes" }

"assword:" { send "$passwd\r" }

timeout { puts "$IP time out" ;exit 1 }

}

expect eof

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值