Bagaimana cara menyalin file dari beberapa server ke sistem lokal saya?

11

Kami memiliki beberapa penerapan aplikasi di server seperti app00, app01 dan sebagainya. Saya perlu menyalin satu file log dari semua server ini ke mac lokal saya sehingga saya dapat melakukan beberapa grepping dan pemotongan.

Saya menggunakan csshX untuk melihat file ini tetapi saya tidak dapat menemukan yang setara untuk scp. Saya pada dasarnya menginginkan dua hal:

  1. Kemampuan untuk terhubung ke n nomor server tersebut dan menyalin file
  2. Hindari penamaan konflik secara lokal mungkin dengan mengawali file log dengan nama host server

Bagaimana saya melakukan ini?

Gaurav
sumber
1
Saya mungkin akan menulis skrip untuk itu sendiri. Apakah itu bukan pilihan?
Bernhard
Saya melakukan itu sekarang Bernhard. :) Saya hanya berharap ada sesuatu seperti csshX untuk ini juga.
Gaurav

Jawaban:

18

Ini sepele untuk dilakukan dengan naskah kecil. Sebagai contoh:

for server in app0 app1 app4 app5 appN; do
    scp user@$server:/path/to/log/file /local/path/to/"$server"_file
done

Di atas akan menyalin file dari masing-masing server secara berurutan dan menamainya SERVERNAME_file. Jadi, file dari app0akan app0_filedll. Anda jelas dapat mengubah nama menjadi apa pun yang Anda inginkan.

terdon
sumber
3
Masukkan &di akhir scpperintah dan waitdi akhir, dan Anda memiliki konkurensi tanpa biaya tambahan.
l0b0
3
@ l0b0 Saya tidak tahu apakah itu diinginkan. Saya suka pendekatan ini karena saya bisa tahu jika dan file mana yang gagal disalin. Tip yang bagus, terima kasih.
terdon
12

Gunakan paralel GNU :

parallel -j0 scp {}:/remote_path file_from_{} ::: host1 host2 host3 # and so on

Tidak seperti solusi yang menggunakan a for, ini akan menjalankan semua unduhan secara paralel

wingedsubmariner
sumber
5
remote_path="/path/to/file"
local_target_dir="/path/to/dir"
hosts=(app00 app01)
for host in "${hosts[@]}"; do
    scp "$host":"$remote_path" "$local_target_dir"/filename."$host"
done
Hauke ​​Laging
sumber
Terima kasih banyak, saya baru mengenal pemrograman bash dan menulis sesuatu seperti itu, hanya lebih kotor. :)
Gaurav
0

Jika Anda dapat menggunakan python, ada modul menarik yang terlihat untuk menyederhanakan tugas administrasi mesin-ish yang disebut fabric: http://docs.fabfile.org/en/latest/tutorial.html

Saya ingin menggunakannya tetapi belum sempat juga

Paul
sumber
0

Ini berhasil untuk saya

#!/bin/bash
#Expect script
/usr/bin/expect -<<EOD 

set SERVERS {1 2 3 .. N}

foreach SERVER \$SERVERS {
    spawn scp user@\$SERVER:remote local/"\$SERVER"RESWeb.log
    expect {
      -re ".*es.*o.*" {
        exp_send "yes\r"
        exp_continue
      }
      -re ".*sword.*" {
        exp_send "pswrd\r"
      }
    }
    expect eof 
}
EOD

echo "completed"
pengguna170232
sumber