2016-11-28 3 views
1

Ich habe ein Shell-Skript, das eine Datei mit scp über das Netzwerk sendet. Das Skript arbeitet ereignisgesteuert, d. H. Jedes Mal, wenn die Datei geändert wird, wird sie mit scp über das Netzwerk gesendet. Ich möchte das Skript so optimieren, dass ich nicht nur jedes Mal die "neuen angehängten/neuen Schreibdaten" sende und die Datei an den anderen Endpunkt angehängt wirdOptimierung SCP über Netzwerk

Das Skript ist wie folgt

while true 
do 
inotifywait -e close_write,moved_to,create . | 
while read -r directory events filename; do 
    if [ "$filename" = "keylog.txt" ]; then 
    sshpass -p "password" scp -o StrictHostKeyChecking=no keylog.txt [email protected]:/home/machine/keylog.txt 
    fi 
done 
sleep 0.00001 
done 
+0

Mögliche Duplikate von [Scp durch ssh tunnel geöffnet] (http://stackoverflow.com/questions/33735624/scp-through-ssh-tunnel-opened) – Jakuje

+0

Können Sie bitte erklären, wie ist das ein mögliches Duplikat zu den referenzierten Frage? Ich wäre bereit, die Frage zu beantworten, wenn dies der Fall ist. –

+0

Die Titel sind irreführend. Es versucht, separate scp-Anforderungen schneller an den Remote-Server zu stellen. Die meiste Zeit verbringen Sie damit, sich mit dem Server zu verbinden, keine Dateien zu übertragen! Daher kann es für Sie interessant sein, das durchzulesen. Natürlich können Sie das auch mit 'rsync' wiederverwenden, um Diff-Transfer und schnellere Übertragungen zu erreichen. – Jakuje

Antwort

0

Ich schlage vor, einen Blick auf rsync zu werfen. Es ist genau für diese Art von Zwecken konzipiert. Zitiert aus man rsync:

Rsync is a fast and extraordinarily versatile file copying tool. It can 
    copy locally, to/from another host over any remote shell, or to/from a 
    remote rsync daemon. It offers a large number of options that control 
    every aspect of its behavior and permit very flexible specification of the 
    set of files to be copied. It is famous for its delta-transfer algorithm, 
    which reduces the amount of data sent over the network by sending only the 
    differences between the source files and the existing files in the desti- 
    nation. Rsync is widely used for backups and mirroring and as an improved 
    copy command for everyday use. 

auf einem Server, scp unterstützt, typischerweise rsync auch funktioniert. Try this:

sshpass -p "password" rsync keylog.txt [email protected]:/home/machine/keylog.txt 

Auch ohne die Parameter Tuning, rsync werden versuchen, übertragen, um die Datenmenge zu minimieren. Wenn die Zieldatei bereits existiert, wird nur die notwendige Differenz übertragen.

+0

Ich habe die Befehle mit der Zeitoption ausgeführt. Die Zeit, die mit Rsync verbracht wird, ist 0.328ms, während mit dem Befehl scp 0.283ms. –

+0

@AbhimanyuKhanna, dieser Benchmark ist zu kurz, um relevant zu sein. – Setop

+0

@AbhimanyuKhanna - 'rsync' unterstützt die effiziente Behandlung von Sparse-Dateien auch mit' -S'. Ich verwende immer die Komprimierungsoption "-z". – alvits