我编写了一个预期脚本,该脚本最后调用scp
将一个大文件从服务器 A 复制到服务器 B。
我遇到的问题(使用rsync
和不使用时相同scp
)是,expect 脚本在文件传输完成之前终止。我知道我可以在 expect 中设置超时,但随着文件大小的增加,超时也会增加。
有没有人遇到过这个问题并且是否有我可以在期望中使用的等待函数?
非常感谢。
答案1
根据http://oreilly.com/catalog/expect/chapter/ch03.html,您可以简单地设置timeout
为-1
禁用超时机制。
答案2
有两件事,第一,是的,set timeout -1
如果你不想让它超时。
其次,您应该使用wait
来允许scp
或rsync
命令完成。简单地等待太久并不那么可靠...
最后一条评论,我已经成为scp
用户很长一段时间了,但真的越来越喜欢部分增量和疏的能力rsync
。有了这些,即使传输断开,也可以从中断的地方重新开始,这有时非常有用......尤其是在等待很长时间的情况下 ;)
就像是:
rsync -a -v -i --timeout=30 --stats --log-file="$LOG_FILE" --partial --exclude 'log*.txt' "$DATA_DIR"/"$DATE" $DEST:"$DEST_DIR"
(这将从节点推送到主节点)
这样做可以在传输大文件、不稳定的网络等时节省大量带宽……