OS/Linux
Linux 여러 대 서버에 ssh 접근 후 shell 파일 실행하기
CofS
2019. 2. 22. 11:13
Linux 여러 대 서버에 ssh 접근 후 shell 파일 실행하기
여러대의 vm 서버에 동시에 명령어를 날려야 하는 경우가 생겼다.
해당 서버들의 ip 를 목록으로 만들고 반복문으로 ssh 를 접근해서 명령어를 실행하면 되지 않을까 싶어 소스를 만들어보았다.
1
2
3
4
5
6
7 |
IP_LIST=("10.10.10.1" "10.10.10.2" "10.10.10.3" "10.10.10.4" "10.10.10.5")
for VALUE in "${IP_LIST[@]}"; do
ssh -p 22 centos@$VALUE <<EOF
sh < /temp.sh
EOF
done |
cs |
1# : 접근해야 하는 IP 목록
3# : IP 목록으로 반복문 실행
4# : 해당 IP로 ssh 접근
5# : 접근 후 sh 파일 실행
아주 심플한 소스를 만들었다.
그런데 조금의 문제가 있다.
위 반복문은 ssh 접근 후 temp.sh 파일의 실행이 끝날때 까지 대기 하고 끝나면 다음 서버에 접근하게 된다.
temp.sh 파일을 실행할 때 백그라운드에서 실행시킬 필요가 있다.
그래서 동시에 반복문을 돌면서 호출을 할 수 있다.
1
2
3
4
5
6
7 |
IP_LIST=("10.10.10.1" "10.10.10.2" "10.10.10.3" "10.10.10.4" "10.10.10.5")
for VALUE in "${IP_LIST[@]}"; do
ssh -p 22 centos@$VALUE <<EOF
nohup sh < /temp.sh >> '/temp.log' &
EOF
done |
cs |
5# 처럼 nohup 명령어를 사용해서 사용자가 로그아웃 되더라도 프로세스가 백그라운드에서 실행하도록 해야 한다.
추가적으로 해당 쉘파일을 실행하면서 나오는 로그(출력, 오류 등) 들도 파일로 저장시켰다.
> (꺽쇠) 가 하나아면 계속 덮어쓰고 >> (꺽쇠)가 두개이면 이어쓰기를 한다.