Назад | Перейти на главную страницу

Как я могу определить, есть ли у меня доступ к ресурсу на FTP-сервере?

Я пытаюсь написать сценарий bash для копирования файлов с локального компьютера на FTP, используя lftp.

Проблема в том, что когда кто-то входит в недоступный путь для mkdir или 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`                                           

Как предложено в комментариях, вы можете предотвратить зависание процесса, используя тайм-аут, например:

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 сделал отличное предложение в комментарии:

Для более крупных сценариев FTP вы можете использовать Perl или аналогичный, что позволит вам выполнять явную обработку ошибок после каждой команды.