다음은 웹사이트에서 파일을 다운로드하기 위해 매일 사용하는 스크립트의 일부입니다. 그러나 최근에는 파일 다운로드 속도 제한을 높였습니다. 절전 시간을 늘렸지만 다른 모든 작업은 너무 오래 걸리고 다운로드할 파일이 많고 일부는 매우 작습니다.
대기 시간을 제거 sleep
하거나 매우 낮게 설정하고 파일 다운로드가 완료될 때까지 기다리도록 스크립트를 수정하고 싶습니다.
편집하다:
대용량 파일 다운로드가 완료되지 않는 이유를 찾았습니다. Failure when receiving data from the peer
이 문제를 어떻게 해결할 수 있나요? wget으로 전환하는 것이 최선의 선택이라는 것을 읽었습니다. 그런데 이 스크립트가 wget에서 어떻게 작동합니까?
#check directories are empty, not empty if there was a problem last time
cd /home/user/upload
if [ "$(ls -A /home/user/upload)" ]; then
# echo 'Directory not empty error for csv manipulation' | /bin/mailx -s "Server scrapeandcleandomains error" use
echo "$(date) Directory /home/user/upload not empty for csv manipulation" >> /home/user/logfile
exit 1
else
echo $(date) starting normal >> /home/user/logfile
fi
#create yesterday variable
yesterday=$(echo $(date --date="$1 - 2 days" +"%Y_%m_%d" ) )
#$(date --date="-2 day" +"%Y_%m_%d")
#download .csv.gz files (old wget command) OBSOLETE!!!!!
#cd /home/user/upload
#wget -R html,"index.*" -A "$yesterday*.csv.gz" -N -r -c -l1 -nd --no-check-certificate --user USERNAME --password PASSWORD -np http://www.websitedownloadfrom.com/sub/
#exit 1
#download index and sanitize > index2.tmp
cd /home/user
curl -u "USERNAME:PASSWORD" -k http://www.websitedownloadfrom.com/sub/ -o index.html.tmp
links -dump index.html.tmp > /home/user/index.tmp
#this will work until 2049 ONLY!!
sed -i '/20[1-4][0-9]/!d' index.tmp
sed -i '/\[DIR\]/d' index.tmp
for i in {1..50} ; do
sed -i 's/ / /' index.tmp
done
awk -F" " '{ print $3 }' index.tmp > index2.tmp
sed -i "/^${yesterday}/!d" index2.tmp
#download .csv.gz files according to index2.tmp
while read F ; do
cd /home/user/upload
curl -u "USERNAME:PASSWORD" -k http://www.websitedownloadfrom.com/sub/$F -o $F &
sleep 80
done < /home/user/index2.tmp
sleep 60
#check that we downloaded something
cd /home/user/upload
if ! [ "$(ls -A /home/user/upload)" ]; then
echo 'nothing downloaded from upload' >> /home/user/logfile
rm -f /home/user/upload/*
rm -f /home/user/index.html.tmp
rm -f /home/user/index.tmp
rm -f /home/user/index2.tmp
exit 1
fi
답변1
이 sleep 80
명령과 바로 앞의 명령을 삭제하십시오 &
. 이를 curl
제거하면 다음 주기를 계속하기 전에 &
스크립트가 다운로드가 완료될 때까지 기다리게 됩니다 .curl