问题
我正在使用 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,他们无法控制。
由于我下载的文件非常小,处理速度非常快,多次尝试连接 SFTP 最终看起来可疑(我猜),最终我受到了速率限制。脚本仍然有效,只是速度非常慢。
文件太多,无法一次性全部下载到我的 DO 框中,因此我想知道是否有一个巧妙的方法,让我可以在处理日志的同时保持 SFTP 连接打开。