我试图编写bash脚本文件从本地机器复制到FTP使用lftp 。
问题是,当有人input无法访问的mkdirpath或put ,则lftp返回:
Access failed: 550 /: Device or resource busy
而我的Bash脚本卡住了,并没有终止。
如何在执行下一个命令之前检查是否可以访问资源?
这是我的代码的相关部分:
OUTPUT=`lftp -u $USER,$PASS -p $PORT $HOST <<HEREDOCUMENT set ftp:ssl-allow no mkdir $FTP_DIR put $LOCAL_DIR/$LOCAL_FILE -o $FTP_DIR/$FTP_FILE bye HEREDOCUMENT`
正如评论中所build议的那样,您可以通过使用超时来防止进程卡住,例如:
OUTPUT=$(lftp -u $USER,$PASS -p $PORT $HOST <<EOF set net:timeout 5 set net:max-retries 2 set net:reconnect-interval-base 5 set ftp:ssl-allow no mkdir $FTP_DIR put $LOCAL_DIR/$LOCAL_FILE -o $FTP_DIR/$FTP_FILE bye EOF)
@Marki在评论中提出了一个很好的build议:
更大的FTP脚本,你可以使用Perl或类似的,这将允许你在每个命令后执行显式的error handling。