web-dev-qa-db-ja.com

SCP実行時間をミリ秒単位で取得するにはどうすればよいですか?

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.

私が今直面している問題は、ミリ秒単位で時間を返さない(私は思う)、秒単位で与えることです。

この問題の修正にご協力ください。

1
saurav

timeを使用することをお勧めします。

例えば

TMP=$(mktemp)
time (scp yourfile user@otherhost:/path/ ) 2>$TMP
awk -F'[ ms]+' '/^real/ {print "copy time: "1000*$2"ms"}' $TMP
rm $TMP
3
user55518

冗長モードで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
2
mkc