美文网首页
【Linux-运维-自动化】expect批量scp中断 (spa

【Linux-运维-自动化】expect批量scp中断 (spa

作者: blue_smile | 来源:发表于2016-10-12 20:40 被阅读0次

    【需求背景】

    从不同机器之间批量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

    相关文章

      网友评论

          本文标题:【Linux-运维-自动化】expect批量scp中断 (spa

          本文链接:https://www.haomeiwen.com/subject/qnpbyttx.html