scp有时挂在scipt

时间:2015-12-16 15:12:32

标签: linux bash shell networking

我需要一些帮助来尝试找出我们遇到的问题。我们在两个独立的网络(network1和network2)上的设备中运行了以下bash shell脚本。两个网络都转到同一目标服务器。

while 
do
    # do something ...
    scp *.zip "$username@$server_ip:$destination_directory"
    # do something ...
    sleep 30
done

该脚本运行正常,直到最近更改为network2,其中上面脚本中的scp命令有时会在重置之前挂起数小时。 netowrk1上的相同脚本仍然正常工作,但没有改变。我们无法确定network2的问题,除scp外,一切似乎都有效。挂起并不是每次尝试都会发生,但是当它挂起时会挂起几个小时。

所以我改变了scp命令,如下所示,它现在在几分钟内重置,数据延迟是可以忍受的,但不可取。

scp -o BatchMode=yes -o ServerAliveCountMax=3 -o ServerAliveInterval=10 -o \
        ConnectTimeout=60 *.zip "$username@$server_ip:$destination_directory"

我也试过sftp如下;

sftp -o ConnectTimeout=60 -b "batchfiles.txt" "$username@$server_ip"

ConnectTimeout似乎在sftp中运行不佳,因为它有时会挂起几个小时。所以我回到使用scp。

我甚至在scp和sftp中都包含了-o IdentityFile = path_to_key / id_rsa选项,认为它可能是一个身份验证问题。这也不起作用。

真正奇怪的是,当我从终端发出相同的命令时它始终有效。 shell脚本作为后台任务运行。我正在运行Linux 3.8.0-26-通用#38-Ubuntu和OpenSSH_6.1p1 Debian-4。我不认为是本地脚本权限问题,因为; 1)它在network2改变之前工作,2)它在某些时候工作。

我做了网络数据包捕获。我可以看到,每次scp命令挂起时,都会在scp会话开始后的几秒钟内伴随[TCP Retransmission]和[RST,ACK]。

我很困惑,如果问题是网络或脚本相关。根据我想到的事件顺序,可能是由于最近网络2的变化。但是为什么每次我尝试时终端都会使用相同的命令?

有人可以告诉我我的问题是什么,或者告诉我如何解决问题?

感谢您阅读和帮助。

0 个答案:

没有答案