여러 서버에서 로컬 시스템으로 파일을 어떻게 복사합니까?


11

app00, app01 등과 같은 서버에 여러 응용 프로그램을 배포했습니다. 이 모든 서버에서 로컬 로그로 단일 로그 파일을 복사하여 약간의 그 리핑 및 자르기를 수행해야합니다.

이 파일을보기 위해 csshX를 사용했지만 scp에 해당하는 파일을 찾을 수 없습니다. 나는 기본적으로 두 가지를 원한다.

  1. n 개의 이러한 서버에 연결하고 파일을 복사하는 기능
  2. 로그 파일 앞에 서버 호스트 이름을 붙여서 이름 충돌이 로컬로 발생하지 않도록하십시오

어떻게해야합니까?


1
아마 직접 스크립트를 작성했을 것입니다. 옵션이 아닙니까?
Bernhard

베른하르트가 지금하고 있습니다. :) 나는 이것을 위해 csshX와 같은 것이 있기를 바랐습니다.
Gaurav

답변:


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
명령 &의 끝과 끝에 A를 넣으면 추가 비용없이 동시성이 있습니다. scpwait
l0b0

3
@ l0b0 그것이 바람직한 지 모르겠습니다. 복사하지 못한 파일과 파일을 알 수 있기 때문에이 방법이 마음에 듭니다. 그래도 좋은 팁, 감사합니다.
terdon


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

고마워, 나는 프로그래밍을 bash에 처음 접했고 더 더러운 것을 작성했다. :)
Gaurav


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"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.