본문
우리 팀의 프로젝트는 여러 대의 서버를 엮어 하나의 시스템으로 구축하는 일을 하기 때문에(지금은 서버 12대..덜덜덜), 개발 도중 새로운 실행파일을 생성하게 되면 이를 각 시스템에 패치하는 작업도 만만치 않다. 물론 이를 쉽게하기 위해 각 서버마다 갱신된 파일을 메인 서버에서 다운 받도록 되어있기는 하지만, 이를 가능하게 하는 프로그램은 직접 갱신을 해줘야 하기 때문에 이 프로그램은 직접 패치를 해줘야 한다...(물론, 파일이름을 바꿔서 받은 다음. 요리 저리 해서..자동으로 패치하도록 하는것도 가능할 것 같기는 하다..)
여튼! 지금 회사에서는 서버 하나하나에 telnet으로 접속 후 운영중인 프로세스를 다운 시키고 ftp로 로긴한 담에....파일 업로드 하고..다시 telnet 접속해서 프로세스를 업 시킨다.;
그 중 내가 작업해야하는 양은.........최소7대-_-;;;
초 귀찮다...ㅋㅋ 저번에 이렇게 하는거라고 대충 알려주고..오늘 또 패치됐다고 시키길래..
그냥 스크립트를 만들어버렸다-_-;;
우선..ftp에 접속해서 자동으로 파일을 업로드 하는 스크립트!
이 작업을 하기 전에
홈 디렉토리에 .netrc 파일을 생성하여
호스트 이름. 아이디. 비밀번호를 저장시켜 놓아야한다.
machine 호스트_아이피 login 아이디 password 비밀번호
machine 호스트_아이피 login 아이디 password 비밀번호
machine 호스트_아이피 login 아이디 password 비밀번호
machine 호스트_아이피 login 아이디 password 비밀번호
machine 호스트_아이피 login 아이디 password 비밀번호
============================================================
뭐..대충 이런 식으로 작성해 놓으면 된다..
그리고...실제로 ftp에 접속해서 파일을 업로드 하는 스크립트~!!
============================ up.sh ============================
ftp $1 <<END
bin
hash
prompt
lcd 업로드할 파일이 있는 디렉토리
cd 호스트에 파일을 업로드할 디렉토리
put 파일이름
chmod 777 파일이름
quit
END
=============================================================
// $1 -> up.sh 실행시 첫번째 argument
up.sh naver.com 이라고 입력하면 ftp naver.com 과 같은 효과.
// bin -> 바이너리 모드로 전환
// hash -> 전송과정 표시
// prompt -> (y/n) 과정을 묻지 않음
// lcd -> 로컬 디렉토리 변경
// cd -> 리모트 디렉토리 변경
// put -> 당연히 파일 업로드
// chmod 777 파일이름
그리고...이 up.sh를 사용해서 실제 호스트 이름을 지정해주는 스크립트!!
=====================PROGRAM_PATCH.sh======================
#!/bin/bash
hosts="
172.16.5.133
172.16.5.134
172.16.5.135
172.16.5.136
172.16.5.137
172.16.5.138
172.16.5.139
"
for host in $hosts
do
./.up.sh $host
done
exit 0
=============================================================
뭐..간단하게.............이렇게 해서..........ㅅ-ㅅ
실행하도록 했다....
여기까지 하면...........파일 업로드는 끝~!
그 다음...각 호스트에 자동으로 telnet 연결을 해서 자신이 원하는 명령어를 실행하고 빠져나오기~!..
=============================================================
#!/usr/bin/env python
import sys, telnetlib
# HOST LIST
hosts = [
'172.16.5.133',
'172.16.5.134',
'172.16.5.135',
'172.16.5.136',
'172.16.5.137',
'172.16.5.138',
'172.16.5.139'
]
# USER ID
user = 'USER_ID\n'
# USER PASSWORD
password = 'USER_PASSWORD\n'
print 'This script will execute /etc/init.d/program start at all server'
a = raw_input('Do you want really do it?(y,N)')
# IF input is not Yes, This Script is closed.
if a == 'Y' or 'y':
print 'Start Script'
else:
sys.exit(0);
# for start
for target_host in hosts:
# Connect to host
tn = telnetlib.Telnet(target_host)
# input ID
print tn.read_until('login:')
tn.write(user)
# input PASSWORD
print tn.read_until('Password')
tn.write(password)
print tn.read_until(' ] ')
tn.write('exit\n')
tn.close()
#for end
print '#########################################################'
print '#################### Script end #########################'
print '#########################################################'
=============================================================
파이썬을 이용해서 작성했다..........
Tcl을 쓰고 싶었지만;;(어디서 예제를 봤었기 때문에....) 서버에 설치가 안되어 있어서..할수 없이 다른 방법을 찾다보니..파이썬에서 Telnet 라이브러리가 있길래..ㅎ
간단하게 설명하면...
tn = telnetlib.Telnet(host_name) -> 텔넷 연결
tn.read_until('login:') -> login: 이라는 글자가 나올때 까지 대기!~
tn.write(user) -> user라는 값을 입력..
이 과정을 거치게 되면...당연히 ID까지는 자동으로 입력되는 거겠죠?..
그 다음에 패스워드 입력하고...
뭐..기타 등등..자신이 원하는 작업을 쭈~욱 하다가..
tn.close()를 실행하면 됩니다~..
p.s 위의 스크립트들을 참고해서 수정만 조금하면...
간단한 자신이 원하는 자동화 툴을 생성할 수 있지 않을까요?ㅎ
전..뭐 귀찮아서..우선 여기까지만!ㅋ
'컴퓨터 이야기' 카테고리의 다른 글
[C] 포인터에 대한 짧은(?) 강의. (4) | 2007.05.13 |
---|---|
[C] 동적 메모리 할당// (2) | 2007.04.10 |
[English] CNN Radio Internet Address (0) | 2007.04.03 |
static 라이브러리 관련- (0) | 2007.03.19 |
[Tip] 간단한 Shuffle 알고리즘 코드. (0) | 2007.03.15 |