로컬 서버에서 스크립트를 실행하면 원격 서버들의 ip를 읽어 각 서버에서 명령을 실행하도록 스크립트를 작성했다.
test.sh
exec < $1
if [ -z $1 ]
then
echo "ERR: input remote ip. ex) test.sh <ip file>"
else
while read line
do
line=`echo $line | tr -d '\r\n'`
ssh $USER@$line "mkdir -p $APP_HOME"
scp $FILE_NAME $USER@$line:$APP_HOME
ssh $USER@$line "cd $APP_HOME; tar -xvf $FILE_NAME; rm -f $FILE_NAME"
done
fi
각 리모트 서버에서 실행할 내용
1. $APP_HOME 디렉터리 생성
2. 로컬 서버의 $FILE_NAME 파일을 이전에 생성한 $APP_HOME으로 전송 (파일은 tar.gz이다.)
3. $APP_HOME으로 이동하여 압축 해제 후 tar.gz 파일 삭제
문제는 한 대일 경우 괜찮지만, 여러 서버를 넣고 스크립트를 실행할 경우 처음 한 대에만 적용되고 스크립트가 종료된다.
이럴 때 ssh 명령어에 -n
옵션을 붙여주면 각 서버에서 원하는대로 스크립트 내용을 실행할 수 있다.
exec < $1
if [ -z $1 ]
then
echo "ERR: input remote ip. ex) test.sh <ip file>"
else
while read line
do
line=`echo $line | tr -d '\r\n'`
ssh -n$USER@$line "mkdir -p $APP_HOME"
scp $FILE_NAME $USER@$line:$APP_HOME
ssh -n $USER@$line "cd $APP_HOME; tar -xvf $FILE_NAME; rm -f $FILE_NAME"
done
fi