Csvファイルから送信元と宛先のIPアドレスを読み取り、ファイルを送信元から宛先にコピーするのにかかる時間をミリ秒単位で記録するスクリプトがあります(scpを使用)。以下は私のスクリプトです。
#!/bin/bash
while IFS="," read f1 f2
do
echo "Source IP : $f1"
echo "Destination IP : $f2"
export sourceIP=$f1
export destIP=$(echo "$f2" | tr -d '\n')
ssh -t -t sjain@$f1 'bash -s' <<ENDSSH
#Start copying 100MB File
startTime=$(($(date '+%s%N')/1000000))
echo \$startTime
scp MB_100.txt sjain@$destIP:/home/sjain
endTime=$(($(date '+%s%N')/1000000))
echo \$endTime
printf 'Elapsed time in copying 33KB file: %s\n' \$((endTime-startTime))
#Write the stats to the file
echo $sourceIP','$destIP',33KB,'\$((endTime-startTime)) >> report.txt
exit
ENDSSH
#Write the stats to the file
#echo '10.234.0.9,10.234.0.19,33KB,'\$((endTime-startTime)) >> report.txt
done < ipaddress.csv
出力
[sjain@XYZ ~]$ #Start copying 100MB File
[sjain@XYZ ~]$ startTime=1394659673854
[sjain@XYZ ~]$ echo $startTime
1394659673854
[sjain@XYZ ~]$ scp MB_100.txt [email protected]:/home/sjain
MB_100.txt 100% 100MB 100.0MB/s 00:00
[sjain@XYZ ~]$ endTime=1394659673855
[sjain@XYZ ~]$ echo $endTime
1394659673855
ndTime-startTime)) D01 ~]$ printf 'Elapsed time in copying 33KB file: %s\n' $((e
Elapsed time in copying 33KB file: 1
[sjain@XYZ ~]$ #Write the stats to the file
Time)) >> report.txt01 ~]$ echo 10.Y.Y.Y','10.X.X.X',33KB,'$((endTime-start
[sjain@XYZ ~]$ exit
exit
Connection to 10.Y.Y.Y closed.
私が今直面している問題は、ミリ秒単位で時間を返さない(私は思う)、秒単位で与えることです。
この問題の修正にご協力ください。
time
を使用することをお勧めします。
例えば
TMP=$(mktemp)
time (scp yourfile user@otherhost:/path/ ) 2>$TMP
awk -F'[ ms]+' '/^real/ {print "copy time: "1000*$2"ms"}' $TMP
rm $TMP
冗長モードでscp
を使用して、タイミング統計を取得できます。 scp
行を次のように置き換えます。
scp -v src dest 2>&1 | grep 'Transferred' | awk '{print $(NF - 1) * 1000}'
編集:これはミリ秒まで正確ではない可能性があります。
Pythonを使用すると、マイクロ秒レベルの精度を得ることができます。
#!/usr/bin/env python
import subprocess
import datetime
a=datetime.datetime.now()
subprocess.call(["scp", "-r", "a-dir/", "[email protected]:~/"])
b=datetime.datetime.now()
print (b-a).microseconds