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

Как оставить соединение с SFTP открытым, пока выполняются другие команды bash

Проблема

Я использую sshpass и scp для загрузки файлов с сервера SFTP, но файлы, которые я загружаю, малы, и я в конечном итоге выполняю так много запросов за короткий период времени, что мой сервер замедляется, потому что это выглядит подозрительно.

Можно ли оставить соединение ssh открытым, пока сценарий bash загружает исходный файл, обрабатывает файл и затем переходит к следующему файлу в цикле?

Есть ли лучший способ решить эту проблему, учитывая, что я застрял с плохим SFTP, который у них есть?

Пример кода

 while read i; do
        # i in this case, is the entire file path
        # so we can select the last part 
        just_filepath=$(echo $i  | awk -F "/" '{print $NF}')

        if sshpass -f ftp_pass.txt scp -r $ftp_user_address:$i "clients/$bq_dataset/"$just_filepath >> "debug/upload_dl_debug.log" 2>&1; then
            bash_log "successfully downloaded $just_filepath from FTP"
        else
            bash_log "failed to download $just_filepath from FTP"
        fi

        ...
        processExternalLogs $just_filepath
        ((x++))
done <ftp_file_list.txt

Задний план

У меня есть небольшой сервер Digital Ocean, который используется для обработки журналов перед отправкой их в BigQuery для анализа.

Поскольку на сервере не так много места, сценарий bash, который выполняет всю обработку, загружает каждый файл один за другим, обрабатывает его, затем загружает в BigQuery перед удалением файла, чтобы освободить место для будущих файлов.

Клиентский SFTP, с которым мне приходится работать на данный момент, дешевый на общедоступном хостинге, который они не могут контролировать.

Поскольку файлы, которые я загружаю, настолько малы, а обработка происходит так быстро, несколько попыток подключения к SFTP в конечном итоге выглядят подозрительно (я полагаю), и я получаю ограниченную скорость. Скрипт все еще работает, просто супер медленно.

Слишком много файлов, чтобы загрузить их все сразу в мой ящик DO, поэтому мне интересно, есть ли умный способ, при котором я могу просто оставить соединение SFTP открытым, пока выполняется обработка журналов.