Я пытаюсь написать сценарий 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 или аналогичный, что позволит вам выполнять явную обработку ошибок после каждой команды.