【问题标题】:Automate FTP using Shell Script使用 Shell 脚本自动化 FTP
【发布时间】:2014-01-17 09:57:57
【问题描述】:

我正在使用 shell 脚本通过 FTP 传输文件,我的 shell 工作正常。 但问题是,如果 FTP 连接在传输之间断开,我的 shell 脚本挂起并且不会退出。

这就是我的 shell 脚本的样子。

echo "open $ip" > ${cmd_File}
echo "user $usrnm $psswd" >> ${cmd_File}
echo "cd $location" >> ${cmd_File}
echo "binary" >> ${cmd_File}
echo "put $filename" >> ${cmd_File}
echo "bye" >> ${cmd_File}

progress=$(ftp -vin < ${cmd_File} 2>&1) 1> /dev/null

如果有人可以帮助我处理错误,我会很高兴,我的代码工作得非常好,除非连接中断。 这段代码只是挂在那里,发生这种情况时我需要退出代码。

谢谢, 阿比吉特

【问题讨论】:

    标签: shell ftp


    【解决方案1】:

    考虑使用“expect”重写您的脚本,您可以在其中设置超时。一个例子是here。另一个例子是here

    已编辑

    或者,您可以在 Perl 中轻松进行错误检查,例如 this

    好的,您可以在 shell 中使用以下方法来执行此操作:

    YOURTFPCMD & PID=$! ; (sleep $TIMEOUT && kill $PID 2> /dev/null & ) ; wait $PID
    

    它会启动您的 FTP 命令并保存其 PID。它会立即启动一个子shell,如果它没有完成,它将在 $TIMEOUT 秒后终止您的 FTP 命令,然后等待您的 FTP 命令退出。

    【讨论】:

    • 对不起,伙计,但只需要在 Shell 中完成
    • 谢谢老兄......现在工作正常
    • 太棒了:-) 那你能接受我的回答,让我得到一个可爱的绿色大勾号吗?
    【解决方案2】:

    我使用lftp 而不是ftp 解决了这个问题。

    就我而言,我试图在 GoDaddy 在线存储 FTP 上上传文件。由于某种原因,最大文件 (500 MB) 的传输永远挂起。

    像往常一样安装它(存在于主要发行版中): yum install lftp (CentOS) zypper install lftp (openSuse) ...

    然后创建你的脚本:

    #!/bin/sh
    echo FTP begin at : $(date)
    lftp -u myUser,myPassword myFTPSite <<EOF
    put myfile.gz
    bye
    EOF
    echo $(date) : FTP ended
    
    echo Validating RAID
    cat /proc/mdstat
    exit 0
    

    【讨论】:

      【解决方案3】:

      在 ftp 命令中使用-q quittime 选项:

      按照 mn ftp:

       -q quittime
                   Quit if the connection has stalled for quittime seconds.
      

      试试这个命令,例如:

      progress=$(ftp -q 30 -vin < ${cmd_File} 2>&1) 1> /dev/null
      

      【讨论】:

      • ftp -q 30 提示我“ftp: q: unknown option”
      • 嗯,可能因 ftp 客户端版本而异。你在哪个系统上?
      • Linux Nextgen 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
      • 我也试过 -T [timeout] 但这也给了我同样的结果
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-12
      • 2014-08-23
      • 2015-03-18
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多