繁体   English   中英

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

[英]Check for ftp authentication output for bash script

我运行一个自动备份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

我需要捕获这样的输出并让代码尝试再睡几分钟再重试。

想法?

下面的消息可能是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

如果您可以在感兴趣的系统上安装其他程序,我建议您查看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之后的模式与服务器的530回复匹配,则lftp尝试每60 * 10秒重新连接一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM