Як скопіювати файл з декількох серверів на свою локальну систему?


11

У нас є багаторазове розгортання програми на таких серверах, як app00, app01 тощо. Мені потрібно скопіювати єдиний файл журналу з усіх цих серверів на мій локальний mac, щоб я міг виконати деяке зібрання та вирізання.

Я використовував csshX для перегляду цього файлу, але не можу знайти еквівалент scp. Я в основному хочу дві речі:

  1. Можливість підключення до n номерів таких серверів та копіювання файлу
  2. Уникайте іменних конфліктів локально, можливо, префіксуючи файл журналу з ім'ям сервера

Як це зробити?


1
Я, мабуть, сам написав би сценарій для цього. Хіба це не варіант?
Бернхард

Я роблю це зараз, Бернхард. :) Я просто сподівався, що для цього теж буде щось на кшталт csshX.
Гаурав

Відповіді:


18

Це банально, якщо зробити невеликий сценарій. Наприклад:

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

Вищенаведене копіює файл з кожного з серверів послідовно та називає його SERVERNAME_file. Отже, файл від app0буде app0_fileі т. Д. Ви, очевидно, можете змінити імена на все, що завгодно.


3
Поставте &в кінці scpкоманди і в waitкінці, і у вас є сумісність без зайвих витрат.
l0b0

3
@ l0b0 Я не знаю, чи бажано це. Мені подобається такий підхід, тому що я можу знати, чи і які файли не вдалося скопіювати. Хоча гарний рада, дякую.
тердон


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

Велике спасибі, я новачок в програмі баш і написав щось подібне, просто набагато брудніше. :)
Гаурав

0

Якщо ви можете використовувати python, є цікавий модуль, який намагається спростити завдання машинного адміністрування під назвою тканина: http://docs.fabfile.org/en/latest/tutorial.html

Я хотів його використовувати, але не обійшов його теж


0

Це працювало для мене

#!/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"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.