저는 쉘 세계를 처음 접했고 300개가 넘는 서버에서 파일을 가져오는 간단한 스크립트를 작성하고 있습니다. 아래와 같이 작성하면 한번에 300개의 서버에 모두 로그인하여 파일을 추출하거나 하나씩 추출하게 됩니다. 또한 사용자에게 비밀번호 없는 로그인을 제공할 수 있으며 $username에서 사용자를 언급하거나 이를 위해 다른 스크립트를 만들어야 합니다.
#!/bin/bash
cd /backup
for server in $(cat server.txt)
do
scp -r $username@$server:/tmp/backup/*.txt* .
done
답변1
이렇게 작성했다면 하나씩 살펴보시면 됩니다.
parallel
병렬로 수행하려면 살펴보십시오 (패키지를 설치해야 할 수도 있음). 또한 한 번에 300개 작업을 모두 실행하지 말고 동시 실행 수를 제한하세요. 그렇지 않으면 전체 작업이 느려집니다.
비밀번호 없이 로그인할 수 있습니다. SSH 키 쌍을 생성하고, 이를 수행하는 머신에 개인 키를 입력하고 , 복제하는 모든 300개 머신에 scp
공개 키를 입력해야 합니다 . ~/.ssh/authorized_keys
키가 올바른 위치에 있으면 스크립트를 변경할 필요가 없습니다.
답변2
dirkt가 말했듯이 이것은 각 명령을 순차적으로 실행합니다. 즉, 첫 번째 명령이 완료될 때까지 다음 복사본을 시작하지 않습니다.
스크립트를 합리적인 시간 내에 실행하려면 다음 &
과 같이 줄이나 코드 블록(중괄호 안) 끝에 문자를 추가하여 백그라운드에서 명령을 실행하고 즉시 다음 명령을 시작할 수 있습니다.
#!/bin/bash
for server in $(cat server.txt); do
scp -r $username@$server:/tmp/backup/*.txt* /backup/ &
done