【问题标题】:SFTP Manual command succeed but script is failing at 1 or 2%SFTP 手动命令成功,但脚本在 1% 或 2% 时失败
【发布时间】:2018-06-07 17:45:38
【问题描述】:

我编写了一个脚本来将文件夹从 VPS 传输到 Synology NAS 服务器。该脚本在传输 1% 或 2% 时失败,没有任何说明原因。当我手动运行命令时,它可以正常工作,没有任何问题,并且可以完美地传输文件夹。我不确定是什么原因造成的,如果我能得到一些关于在哪里寻找的指导,我将不胜感激。

脚本:

#!/usr/bin/expect
set dir [timestamp -format "%Y-%m-%d"]
spawn sftp user@host.mybackup.me
expect "Password:"
send "passw0rd\n"
expect "sftp>"
send "cd /directory/\n"
expect "sftp>"
send "put -r /home/backup/$dir\n"
expect "sftp>"
send "bye\n"

结果:

root@host [/scripts]# ./sftp.sh
spawn sftp user@host.synology.me
user@host.mybackup.me's password:
Connected to host.mybackup.me
sftp> cd /directory/for/backup
sftp> put -r /home/backup/2017-12-26
Uploading /home/backup/2017-12-26/ to /backup/2017-12-26
Entering /home/backup/2017-12-26/
Entering /home/backup/2017-12-26/accounts
/home/backup/2017-12-26/file1.tar.gz       2%   26MB   1.8MB/s   08:41 ETAroot@host [/scripts]#
root@host [/scripts]#

手动命令:

root@host [/scripts]# sftp user@host.synology.me
backup@host.mybackup.me's password:
Connected to host.mybackup.me.
sftp> cd directory
sftp> put -r /home/backup/2017-12-26
Uploading /home/backup/2017-12-26/ to /backups/2017-12-26
Entering /home/backup/2017-12-26/
Entering /home/backup/2017-12-26/accounts
/home/backup/2017-12-26/file.tar.gz             100%  959MB 820.2KB/s   19:57
/home/backup/2017-12-26/file2.tar.gz            100%  147MB   1.4MB/s   01:45
sftp> bye
root@host [/Scripts]# 

【问题讨论】:

    标签: linux sftp expect nas synology


    【解决方案1】:

    我猜,在您的情况下,Expect 发生了超时,因为文件传输比默认超时(10 秒)需要一些额外的时间。您可以将timeout 设置为-1,也可以将其增加到更高的值,它们以秒为单位。

    set timeout -1; # Infinite amount of waiting time
    

    set timeout 300; # 5 minutes of waiting time
    

    您可以将上述语句保留在您的代码中。

    send "put -r /home/backup/$dir\n"
    expect {
        timeout {puts "timeout happened"}
        "sftp>"
    }
    send "bye\r"
    expect eof
    

    始终使用\r 字符发送“Enter”键而不是\n。最后一条语句expect eof 将等待sftp 程序的优雅关闭。

    【讨论】:

    • @EmilyE。 :\n 仍然可以工作,但 \n 将在内部转换为 \r
    • 实际上\r通常在输入时转换为\n,而不是\n -> \r
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 2017-08-15
    • 2018-07-12
    相关资源
    最近更新 更多