检查bash脚本的ftp身份验证输出

时间:2013-08-07 15:44:13

标签: linux bash ftp sh

我运行一个自动备份shell脚本,它运行良好,但由于某种原因FTP阻止我几分钟。我想添加一个重试和等待功能。下面是我的代码示例。

   echo "Moving to external server"
   cd /root/backup/
/usr/bin/ftp -n -i $FTP_SERVER <<END_SCRIPT
   user $FTP_USERNAME $FTP_PASSWORD
   mput $FILE
   bye
END_SCRIPT

登录失败后,我收到以下信息

Authentication failed. Blocked.
Login failed.
Incorrect sequence of commands: PASS required after USER

我需要捕获这样的输出并让代码在尝试再次尝试之前尝试睡眠几分钟。

想法?

2 个答案:

答案 0 :(得分:1)

下面的消息可能是stderr而不是stdout,所以你需要先捕获stderr输出:

while true
do
  if ( script 2>&1 |grep -q 'Authentication failed' )
  then
    echo "authentication failed, sleeping for a while before trying again"
    sleep 60
  else
    #everything worked, break out of the while loop
    break
  fi  
done

答案 1 :(得分:1)

如果您可以在感兴趣的系统上安装其他程序,我建议您查看lftp

使用lftp,可以手动设置重新连接之间的时间等参数。

要使用lftp实现目标,您必须调用以下内容

lftp -u user,password ${FTP_SERVER} <<END
set ftp:retry-530 "Authentication failed"
set net:reconnect-interval-base 60
set net:reconnect-interval-multiplier 10
set net:max-retries 10
<some more custom commands>
END

如果ftp:retry-530之后的模式与服务器lftp的530回复相匹配,则尝试每60 * 10秒重新连接一次。