2017-04-21 46 views
0

我做了一個腳本bash來執行幾個「捲曲」操作。我注意到,當我通過腳本或直接在控制檯中執行相同的curl命令時,存在巨大差異。bash腳本和控制檯之間命令的執行時間差異 - 腳本中的錯誤?

execution time for curl through bash script: 56 sec 
execution time for curl directly from console (same command): 1 sec 

腳本中是否有錯誤(例如,寫入命令的方式)? 這裏我的bash腳本:

NUM_USER=0 
NUM_RUNS=0 

while [ $NUM_RUNS -le 0 ] 
do 
    while [ $NUM_USER -le 2 ] 
    do 
     sleep 0.5 
     start_time=`date +%s` 
     curl --proxy http://10.0.20.89:8080 --proxy-negotiate http://10.0.3.50 -u : --negotiate > /dev/null 2>&1 
     end_time=`date +%s` 
     echo execution time was `expr $end_time - $start_time` s 
     NUM_USER=`expr $NUM_USER + 1` 
     sleep 30 
    done 
    NUM_RUNS=`expr $NUM_RUNS + 1` 
done 
+0

唯一可以合理解釋這種差異的是網絡請求,它在網絡上交換的內容有所不同。首先要做的就是記錄來自curl的輸出而不是丟棄它,併發布輸出。檢查兩個環境中的環境變量是否相同,尤其是'PATH','LD_LIBRARY_PATH'等。確保腳本是由bash執行的(bash腳本必須以'#!/ bin/bash'開頭或'#!/ usr/bin/env bash'或類似的文件,儘管其他主要兼容的shell不會解釋如此巨大的差異 – Gilles

+0

我忘了寫在這裏,但是是腳本以#!/ bin/bash輸出與控制檯或腳本的輸出相同我將輸出重定向添加到null以加速進程(沒有任何結果) – user3472065

+0

您也可以使用tcpdump來查看請求。腳本看起來不錯 –

回答

0

找到了答案做在兩種情況下,數據包的tcpdump的。 總之,使用腳本,執行dns來解析地址(不需要),這會導致延遲。直接通過控制檯那些DNS請求不存在。 最後,命令的結果是一樣的。